Sound generation / synthesis with python?

后端 未结 7 1183
执念已碎
执念已碎 2020-12-02 08:17

Is it possible to get python to generate a simple sound like a sine wave?

Is there a module available for this? If not, how would you go about creating your own?

7条回答
  •  执念已碎
    2020-12-02 08:31

    I am working on a powerful synthesizer in python. I used custom functions to write directly to a .wav file. There are built in functions that can be used for this purpose. You will need to modify the .wav header to reflect the sample rate, bits per sample, number of channels, and duration of synthesis.

    Here is an early version of a sin wave generator that outputs a list of values that after applying bytearray becomes suitable for writing to the data parameter of a wave file. [edit] A conversion function will need to transform the list into little endian hex values before applying the bytearray. See the WAVE PCM soundfile format link below for details on the .wav specification.[/edit]

    def sin_basic(freq, time=1, amp=1, phase=0, samplerate=44100, bitspersample=16):
        bytelist = []
        import math
        TwoPiDivSamplerate = 2*math.pi/samplerate
        increment = TwoPiDivSamplerate * freq
        incadd = phase*increment
        for i in range(int(samplerate*time)):
            if incadd > (2**(bitspersample - 1) - 1):
                incadd = (2**(bitspersample - 1) - 1) - (incadd - (2**(bitspersample - 1) - 1))
            elif incadd < -(2**(bitspersample - 1) - 1):
                incadd = -(2**(bitspersample - 1) - 1) + (-(2**(bitspersample - 1) - 1) - incadd)
            bytelist.append(int(round(amp*(2**(bitspersample - 1) - 1)*math.sin(incadd))))
            incadd += increment
        return bytelist
    

    A newer version can use waveforms to modulate the frequency, amplitude, and phase of the waveform parameters. The data format makes it trivial to blend and concatenate waves together. If this seems up your alley, check out WAVE PCM soundfile format.

提交回复
热议问题