Python マイク音声入力をWAVE形式で保存する方法[Windows 音声録音]

Python
この記事は約4分で読めます。

前回から引き続いて、Windowsでのマイク音声の制御について記載します。
今回は、録音です。今回フーリエ変換しようかと思っていましたが、まずは音声を録音してそれを解析するような形の方がよいのかもと思って録音にしてみました。
今後は、フーリエ変換による周波数の取り方や音声レベルの取得なんかをしていきたいと思います。

2021/11/18追記

本記事では、とにかくファイルを保存することを焦点においています。

より実用的にリアルタイムでファイルにWabeデータを書き込む方法を以下で紹介していますので、以下も参考にしてみてください。

Pyaudio 実行結果

今回も前回に続いて、Pyaudioを使って音声の取得をします。
pyaudioってどうやって使うのって方は、↓を見てみてください。

サンプルコード

じゃあ保存方法の説明の前にコードを全部を張り付けておきます。

import sys
import pyaudio
import wave 

def audiostart():
    audio = pyaudio.PyAudio() 
    stream = audio.open( format = pyaudio.paInt16,
                         rate = 44100,
                         channels = 1, 
                         input_device_index = 1,
                        input = True, 
                        frames_per_buffer = 1024)
    return audio, stream

def audiostop(audio, stream):
    stream.stop_stream()
    stream.close()
    audio.terminate()

def read_plot_data(stream):
    data = stream.read(1024)
    return data
    
    
def rec_exec(file_path):
    # 録音データをファイルに保存
    wave_f = wave.open(file_path, 'wb')
    wave_f.setnchannels(1)
    wave_f.setsampwidth(2)
    wave_f.setframerate(44100 )
    wave_f.writeframes(b''.join(rec_data))
    wave_f.close()

if __name__ == '__main__':
    args = sys.argv
    
    if len(args) != 1:
        # Audio インスタンス取得
        (audio,stream) = audiostart()
        
        rec_data = []
        print("Start")
        # 音声を読み出し
        while True:
            try:
                data = read_plot_data(stream)
                rec_data.append(data)
            except KeyboardInterrupt:
                print("stop")
                break
       
        # Audio デバイスの解放
        audiostop(audio,stream)

        #保存実行
        rec_exec( args[1] )


実行結果

では実行してみましょう。
今回は引数で、ファイル名を与えるようにしていますので、実行するファイルの後ろにファイルパスを指定します。

実行結果は以下です。

ためしに、WindowsMediaPlayerで再生してみるとしっかり再生できました。

続いてはプログラムの解説ですが、解説は次ページにて記載します。

コメント

タイトルとURLをコピーしました