Search code examples
pythonpython-3.xaudiopyaudio

How to write pyaudio output into audio file?


I currently have the following code, which produces a sine wave of varying frequencies using the pyaudio module:

import pyaudio
import numpy as np

p = pyaudio.PyAudio()

volume = 0.5
fs = 44100
duration = 1

f = 440

samples = (np.sin(2 * np.pi * np.arange(fs * duration) * f / 
fs)).astype(np.float32).tobytes()

stream = p.open(format = pyaudio.paFloat32,
                channels = 1,
                rate = fs,
                output = True)

stream.write(samples)

However, instead of playing the sound, is there any way to make it so that the sound is written into an audio file?


Solution

  • Using scipy.io.wavfile.write as suggested by @h lee produced the desired results:

    import numpy
    from scipy.io.wavfile import write
    
    volume = 1
    sample_rate = 44100
    duration = 10
    frequency = 1000
    
    samples = (numpy.sin(2 * numpy.pi * numpy.arange(sample_rate * duration)
         * frequency / sample_rate)).astype(numpy.float32)
    
    write('test.wav', sample_rate, samples)
    

    Another example can be found on the documentation: https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html