Pythonのプログラムで音質を変化させよう

Pythonで音声データの音質を変更するプログラムを作りましょう。

アクティビティの準備

アクティビティを始める前に次の準備を行いましょう。

  • 1. Google Colabを開きましょう。

    次の「Google Colab」ボタンを押して「Google Colab」にアクセスしましょう。

  • 2. 新しいノートブックを作成し、名前を「IP01-05」と付けましょう。

  • 3. 以下のリンクから、音声ファイルをダウンロードしましょう。

    以下のリンクを右クリックし、「リンク先を別名で保存」(またはそれに近い表現)を選択してください。

    名前は元のままでダウンロードをしてください。

    音声データ(ip01-05-01.wav)をダウンロード

    データをダウンロードしたら、音楽再生アプリなどで聞いてみましょう。

    音声データの仕様

    ファイル名

    ip01-05-01.wav

    サンプリング周波数

    44,100Hz

    量子化ビット数

    16ビット

    チャンネル

    2ch(ステレオ)

準備ができたらアクティビティに進みましょう。

データをアップロードしよう

先ほどダウンロードしたデータを、Google Colabで使用できるようにアップロードします。

次のプログラムをGoogle Colabに貼り付けて実行してください。

from google.colab import files
uploaded = files.upload()
# アップロードされたファイル名を取得(最初の1件)
filename = list(uploaded.keys())[0]

以下のように表示されたら成功です。

「ファイルを選択」をクリックして、先ほどダウンロードしたデータをアップロードしましょう。

アップロードに成功したら、下のように表示されます。

赤枠の中が、この音声ファイルのデータサイズ、つまりバイト数なんです。

ってことは、1,372,460バイトか

およそ 1.4MB だね

音声データの音質を変化させるプログラムを作ろう

アップロードしたデータを読み込み、加工します。

Google Colabの新しいプログラム記入部分を作成し、次のプログラムを貼り付けて実行してください。

from scipy.io import wavfile
from scipy.signal import resample
import numpy as np
from IPython.display import Audio

# 元のWAVファイルを読み込み(アップロード済みであることが前提)
rate, data = wavfile.read(filename)

# モノラルに変換(ステレオなら)
if len(data.shape) > 1:
    data = data.mean(axis=1).astype(data.dtype)

# サンプリング周波数を変更
target_rate = 44100
num_samples = int(len(data) * target_rate / rate)
resampled_data = resample(data, num_samples).astype(np.int16)

# 再生(Audioオブジェクトで直接)
print(f"サンプリング周波数:{target_rate}")
Audio(data=resampled_data, rate=target_rate)

なんだか、プログラムがとっても難しくなったね

・・・・・・

育人の心がどこかにいっちゃった

確かに、今このプログラムの全てを理解するのは難しいです。

大事なところだけ、説明していきますね。

まずは、このプログラムを実行すると、このようなものが表示されます。

再生ボタンを押すと、音声が流れます。音声を聞いてみましょう。

あんまり変化がわからないですね。

実は、まだ少ししか変わっていません。

では、プログラムの説明をしましょう。

プログラム 9行目〜11行目

ステレオ(2ch)を、モノラル(1ch)に変換しています。

左右の音の平均値を取ることで、一つの音に変換しています。

プログラム 9行目〜11行目

ここで、サンプリング周波数を設定しています。

44,100が設定されてるっていうことは、サンプリング周波数は変えないで、モノラルに変換しているだけなんですね。

だから、違いがよくわからなかったんだね。

でも、ステレオの2chから、モノラルの1chに変化したことで、データも半分になるんだよね!!

それでは、サンプリング周波数の値を変えて再生してみましょう!!

思い切って、5000にしてみましょうか


上記プログラムの14行目、44100を、5000に変えて実行してください。


全然音質が違うね。

サンプリング周波数を小さくすると、音質は低下してしまいますが、その分データのサイズが小さくなるんですよ。

いろんな値で試してみましょう。

数値を大きくしてみたけど、音質が良くなるわけじゃないんですね。

はい、A/D変換の性質上、サンプリング周波数は録音時より高くしても、波形はほとんど変化しないんです。

なので、44100よりも小さい値で試してください。

ただし、小さすぎると音声が再生できないので注意してください。

はい、いろいろ試してみます。


音声データを保存しよう

サンプリング周波数を、「11025」にして改めて実行してください。

Google Colabの新しいプログラム記入部分を作成し、次のプログラムを貼り付けて実行してください。

import os
wavfile.write("resample_data.wav", target_rate, resampled_data)
print(f"保存完了: resample_data.wav({target_rate} Hz)")
file_size_bytes = os.path.getsize("resample_data.wav")
print(f"📦 ファイルサイズ: {file_size_bytes} バイト")

files.download('resample_data.wav')

このプログラムを実行すると、修正した音声データがダウンロードされ、画面にサイズが表示されます。

① ダウンロードしたデータのファイル名を"ip01-05-自分の名前.wav"に変更して提出してください。

例: ip01-05-広伝亜美.wav

選択されていません

対応形式:.wav

② 説明を読み返し、データを修正する前のファイルのデータサイズを、バイト単位で答えてください。

③ サンプリング周波数を「11025Hz」に修正した後のファイルのデータサイズを、バイト単位で答えてください。

④ 修正する前と修正した後で、データサイズはおよそ8分の1になっています。その理由を説明してください。

最大 200 文字

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる