Python 実践 データ加工/可視化 100本ノック に挑戦 ノック79 ノック80

Python 実践 データ加工/可視化 100本ノック」を購入したので、

一通りやっているところです。今日はノック79 ノック80を行います。

資料は以下から入手できます。

Python実践 データ加工/可視化 100本ノック|サポート|秀和システム

 

ノック79 : 音の高さや長さを変えてみよう

 

GoogleColabだとimport IPython.display as dispを使用して音声データを再生していますが、Vscodeだと動作しなかったので、playsoundを使って確認しました。

さらに、「音声.mp3」のようにファイル名に日本語があるとエンコードのエラーが出たので、音声.mp3をコピーしてonsei.mp3に名を変更して使用しています。

さらにplaysoundだと変換したデータをそのまま聞けないので、soundfileのwriteメソッドを利用してwavファイルに置き換えて実行してみました。

 

import librosa
import numpy as np
from playsound import playsound

audio1,sr1 = librosa.load('data/音声.mp3'         ,sr=None,offset=0,duration=1)
audio2,sr2 = librosa.load('data/携帯電話着信音.mp3',sr=None,offset=0,duration=1)

print(audio1.shape)
playsound('data/onsei.mp3')

audio1_pitch=librosa.effects.pitch_shift(audio1,sr1,10)
print(audio1_pitch.shape)
import soundfile
soundfile.write('data/onsei_mod.wav',audio1_pitch,sr1)
playsound('data/onsei_mod.wav')

 

実行結果

ちょっと声が高くなって聞こえました。

 

次に低い声に変換してみます。

audio1_pitch=librosa.effects.pitch_shift(audio1,sr1,-5)
print(audio1_pitch.shape)
soundfile.write('data/onsei_mod2.wav',audio1_pitch,sr1)
playsound('data/onsei_mod2.wav')

 

実行結果

低いです。

 

次に電話の着信音の時間の間延びを行ってみます。「携帯電話着信音.mp3」をtest.mp3という名にリネームして使用してみました。

audio2_time=librosa.effects.time_stretch(audio2,0.5)
print(audio2_time.shape)
soundfile.write('data/test_mod.wav',audio2_time,sr2)
playsound('data/test.mp3')
playsound('data/test_mod.wav')

 

実行結果

間延びしました。

 

元データより短い間隔で着信を鳴らしたい場合は、引数を1より大きい値に設定します。

audio2_time=librosa.effects.time_stretch(audio2,2)
print(audio2_time.shape)
soundfile.write('data/test_mod2.wav',audio2_time,sr2)
playsound('data/test.mp3')
playsound('data/test_mod2.wav')

 

実行結果

短いです。

 

wavファイルをmp3に変換したい場合は以下のように行います。

ffmpegがインストールされていない場合はpip install ffmpeg_pythonを実行します。

import ffmpeg
m_data = ffmpeg.input("data/test_mod.wav")
# 出力
o_data = ffmpeg.output(m_data, "data/test_mod.mp3")
# 実行
ffmpeg.run(o_data)

 

 

ノック80 : 音データを保存しよう

音データの保存はsoundfileのwriteメソッドで行います。

生成されるファイルの拡張子はwav形式です。

import soundfile
soundfile.write('data/onsei_mod.wav',audio1_pitch,sr1)

 

 

 

 

 

/* -----codeの行番号----- */