Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python(wave)を使用したWAVファイルの読み取りと書き込み


Pythonの標準ライブラリのwaveモジュールは、オーディオWAV形式への簡単なインターフェイスです。このモジュールの関数は、オーディオデータをraw形式でオブジェクトなどのファイルに書き込み、WAVファイルの属性を読み取ることができます。

ファイルは、組み込みのopen()関数と同じように、「書き込み」モードまたは読み取りモードで開かれますが、waveモジュールではopen()関数が使用されます

wave.open()

この関数は、オーディオデータを読み書きするためのファイルを開きます。この関数には2つのパラメーターが必要です。1つはファイル名、もう1つはモードです。モードは、オーディオデータを書き込む場合は「wb」、読み取りを行う場合は「rb」にすることができます。

obj = wave.open('sound.wav','wb')

'rb'のモードはWave_readオブジェクトを返し、'wb'のモードはWave_writeオブジェクトを返します。

Wave_writeオブジェクトには次のメソッドがあります

close() waveによって開かれた場合はファイルを閉じます。
setnchannels() チャンネル数を設定します。モノラルの場合は1ステレオチャンネルの場合は2
setsampwidth() サンプル幅をnバイトに設定します。
setframerate() フレームレートをnに設定します。
setnframes() フレーム数をnに設定します。
setcomptype() 圧縮の種類と説明を設定します。現時点では、圧縮タイプNONEのみがサポートされており、圧縮はサポートされていません。
setparams() パラメータタプル(nchannels、sampwidth、framerate、nframes、comptype、compname)を受け入れます
tell() ファイル内の現在の位置を取得します
writeframesraw() 修正せずにオーディオフレームを書き込みます。
writeframes() オーディオフレームを作成し、それらが正しいことを確認します。

次のコードは、持続時間が99999秒のランダムな短整数バイトのWAVファイルを作成します。

import wave, struct, math, random
sampleRate = 44100.0 # hertz
duration = 1.0 # seconds
frequency = 440.0 # hertz
obj = wave.open('sound.wav','w')
obj.setnchannels(1) # mono
obj.setsampwidth(2)
obj.setframerate(sampleRate)
for i in range(99999):
   value = random.randint(-32767, 32767)
   data = struct.pack('<h', value)
   obj.writeframesraw( data )
obj.close()
Wave_readオブジェクトメソッド
close() ウェーブモジュールによって開かれた場合は、ストリームを閉じます。
getnchannels() オーディオチャンネルの数を返します(モノラルの場合は1、ステレオの場合は2)。
getsampwidth() サンプル幅をバイト単位で返します。
getframerate() サンプリング頻度を返します。
getnframes() オーディオフレームの数を返します。
getcomptype() 圧縮タイプを返します(サポートされているタイプは「NONE」のみです)。
getparams() get *()メソッドの出力と同等のnamedtuple()(nchannels、sampwidth、framerate、nframes、comptype、compname)を返します。
readframes(n) 最大nフレームのオーディオをバイトオブジェクトとして読み取り、返します。
rewind() ファイルポインタをオーディオストリームの先頭に巻き戻します。

次のコードは、WAVファイルのパラメータの一部を読み取ります。

import wave
obj = wave.open('sound.wav','r')
print( "Number of channels",obj.getnchannels())
print ( "Sample width",obj.getsampwidth())
print ( "Frame rate.",obj.getframerate())
print ("Number of frames",obj.getnframes())
print ( "parameters:",obj.getparams())
obj.close()
出力
Number of channels 1
Sample width 2
Frame rate. 44100
Number of frames 99999
parameters: _wave_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype='NONE', compname='not compressed')

  1. Pythonを使用して複数のファイルの名前を変更する

    rename()メソッドは、Python3でファイルまたはディレクトリの名前を変更するために使用されます。 rename()メソッドはosモジュールの一部です。 os.rename()の構文 os.rename(src, dst) 最初の引数は、名前を変更するファイルの送信元アドレスであるsrcであり、2番目の引数は新しい名前の宛先であるdstです。 画像フォルダが1つあるディレクトリを考えてみましょう。ここにこの画像フォルダがあります。 入力 サンプルコード import os # Function to rename multiple files def main():

  2. Pythonopenpyxlモジュールを使用してExcelファイルの読み取りと書き込み

    Pythonは、Excelファイルを操作するためのopenpyxlモジュールを提供します。 このモジュールでは、Excelファイルの作成方法、書き込み方法、読み取り方法などを実装できます。 openpyxlモジュールをインストールするには、コマンドプロンプトでこのコマンドを記述できます pip install openpyxl シートにタイトル名を付けたい場合 サンプルコード import openpyxl my_wb = openpyxl.Workbook() my_sheet = my_wb.active my_sheet_title = my_sheet.title print