ChatGPTのCode Interpreterを活用して音声ファイルの処理を行う

「ChatGPTのCode Interpreterの活用方法を知りたい」「ChatGPTのCode Interpreterを使って音声ファイルの処理ができるの?」そう思う方もいるのではないでしょうか。

実は、ChatGPTのCode Interpreterを活用することで、音声ファイルの処理を行うことができます。

今回PROMPTYでは、ChatGPTのCode Interpreterを使った音声ファイルの処理方法をご紹介します。

Code Interpreterの概要について知りたい方は、こちらの記事をご覧ください。

関連記事

ChatGPTのCode Interpreterというコード実行プラグインがChatGPT Plus会員(有料会員)にリリースされたことが分かりました。 これにより、ChatGPTを使用している間、データ解析やグラフ生成といった機能[…]

① 音声ファイルを編集する

今回はこちらのフリー音源を使います。テーマは明るいドラムの音源です。

音声ファイルをトリミングして保存する

音声ファイルを読み込んだ後、最初の5秒をトリミングして新しく保存します。

プロンプト:

音声ファイルを最初の5秒を切り取って新しく保存してください。適切なファイル名を付けて

GPT-4の出力(Code Interpreter):

トリミングした後の音源のダウンロードページを出力してくれました。

プロンプトで指示した通り、5秒間でトリミングされています。

Code Interpreterで実行したPythonコードはこちらです。

# Extract first 5 seconds (5000 milliseconds)
first_5s = audio[:5000]

# Save to a new .wav file
first_5s.export("/mnt/data/loop1_first5s.wav", format="wav")

音声ファイルを再生速度を変えて保存する

プロンプト:

音声ファイルを2倍速にして新しく保存してください。適切なファイル名を付けて

GPT-4の出力(Code Interpreter):

プロンプトで指示した通り、2倍速に変換した音源のダウンロードページを出力してくれました。

Code Interpreterで実行したPythonコードはこちらです。

from pydub import AudioSegment

# Load audio file
audio = AudioSegment.from_wav("/mnt/data/loop1.wav")

# Change speed by a factor of 2.0 (making it twice as fast)
fast_audio = audio.speedup(playback_speed=2.0)

# Save to a new .wav file
fast_audio.export("/mnt/data/loop1_fast.wav", format="wav")

② 音声ファイルを解析する

先ほどの明るいドラム音源に加えて、こちらのフリー音源を解析します。テーマは暗いドラムの音源です。

音声の波形をプロットする

プロンプト:

音声ファイルから音声波形を取得し、音声の強度、長さ、変動について図解してください。

GPT-4の出力(Code Interpreter):

グラフの見方をはじめ、音声の強度やピークについて丁寧に解説してくれました。

Code Interpreterで実行したPythonコードはこちらです。

import matplotlib.pyplot as plt
import numpy as np
import wave
import struct

# Open the file in read mode and get the parameters
file = wave.open("/mnt/data/loop1.wav", "r")
params = file.getparams()

# Number of samples, sample width, frame rate
nchannels, sampwidth, framerate, nframes = params[:4]

# Read the frames from the file
str_data = file.readframes(nframes)

# Close the file
file.close()

# Convert binary data to integers
wave_data = np.frombuffer(str_data, dtype=np.short)

# If stereo audio, average the two channels
if nchannels > 1:
    wave_data.shape = -1, 2
    wave_data = np.mean(wave_data, axis=1)

# Create a time array for the x-axis of the plot
time = np.arange(0, nframes) * (1.0 / framerate)

# Create the plot
plt.figure(figsize=(12, 4))
plt.plot(time, wave_data, color="blue")

# Add labels and title
plt.ylabel("Amplitude")
plt.xlabel("Time (s)")
plt.title("Waveform of Audio File")

# Show the plot
plt.show()

もう一つの音源についても波形をプロットして、特徴を比較してもらいます。

同様に、音声の波形をプロットしてくれました。また、2つの波形を並べて特徴を比較しています。

2番目のファイル(暗めなドラム音源)の方が強度が高く、振動数が大きいことを解説しています。

スペクトログラムを作成する

プロンプト:

スペクトログラムを作成し、音声信号を分析して図解してください。

GPT-4の出力(Code Interpreter):

プロンプトで指示した通り、スペクトログラムが出力されました。グラフの見方とスペクトログラムのメリットを説明してくれました。

Code Interpreterで実行したPythonコードはこちらです。

# Create a spectrogram of the audio data
frequencies, times, spectrogram = signal.spectrogram(wave_data, framerate)

# Create the plot
plt.figure(figsize=(12, 6))
plt.imshow(spectrogram, aspect='auto', cmap='hot_r', origin='lower', extent=[times.min(), times.max(), frequencies.min(), frequencies.max()])
plt.colorbar(format="%+2.0f dB")
plt.title('Spectrogram of Audio File')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.ylim([frequencies.min(), frequencies.max()]) # Set y-axis limits to frequency range
plt.tight_layout()
plt.show()

2つ目の音源についてもスペクトログラムを作成して、2つの音源を比較します。

今回は視覚的に見づらくなっていますが、2番目の音源の方が、広い範囲の周波数が含まれていることが分かりました。

まとめ

今回PROMPTYでは、ChatGPTのCode Interpreterを活用して、次のような音声ファイルの処理について紹介しました。

  • 音声ファイルのトリミングをする
  • 音声ファイルの再生速度を変更する
  • 音源の波形を調べる
  • 音源のスペクトログラムを作成する

音声ファイルをアップロードするだけで、コードを書く必要がなく所望の処理ができることが、ChatGPT Code Interpreterの大きな強みと言えるでしょう。

今回の例を参考に、皆さまもChatGPTのCode Interpreterを使った音声ファイルの処理を試してみてはいかがでしょうか。