読み込み中...

初心者も安心!Pythonで音を鳴らす7つの方法

Pythonを使って音を鳴らす具体的なコード例とその説明 Python
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

今回はPythonを使って音を鳴らす7つの方法を詳細に解説します。

プログラミング初心者の方でも、本記事を読むことでPythonを用いて音を鳴らす基本的な手法を理解し、自身のプロジェクトに応用できるようになるでしょう。

●Pythonとは

Pythonは、1991年にギド・ヴァンロッサムによって開発された汎用的なプログラミング言語で、そのコードの可読性と簡潔さが特徴です。

学習の敷居が低く、また、広範なライブラリやフレームワークが存在するため、初心者から専門家まで幅広く利用されています。

○Pythonの特徴

Pythonの一番の特徴はその可読性と使いやすさです。

明確な文法規則と豊富なライブラリがあり、データ分析、ウェブ開発、人工知能開発、ゲーム開発など、様々な用途で使用できます。

また、その汎用性の高さから、初学者にとって最初のプログラミング言語として推奨されることも多いです。

●Pythonで音を鳴らすための準備

Pythonで音を鳴らすためには、いくつかの準備が必要です。

まず、Pythonの環境が整っていることを確認しましょう。

Pythonのバージョンは3.xが推奨されます。

次に、音を鳴らすためのライブラリをインストールする必要があります。

○必要なライブラリのインストール

Pythonで音を鳴らすためには、「simpleaudio」「pygame」「pydub」などのライブラリがあります。

インストールはpipを利用します。

下記のコマンドを実行することでインストールできます。

pip install simpleaudio pygame pydub

このコードでは、「pip」というPythonのパッケージ管理システムを使って、音を鳴らすために必要なライブラリ「simpleaudio」「pygame」「pydub」をインストールしています。

この例では、ターミナルやコマンドプロンプトを開き、上記のコマンドを実行してライブラリをインストールしています。

この操作により、Pythonで音を鳴らすために

必要なライブラリが手元の環境にダウンロードされ、利用可能になります。

●Pythonで音を鳴らす方法

Pythonで音を鳴らすには様々な方法があります。今回は、その中でも主に使用される7つの方法を解説します。

それぞれの方法は、初心者でも実装できるよう、具体的なコード例とともに詳細に説明します。

○方法1:単一の音を鳴らす

Pythonで単一の音を鳴らす方法を見ていきましょう。

今回は「simpleaudio」ライブラリを使用します。

□サンプルコード1

import numpy as np
import simpleaudio as sa

frequency = 440  # 440Hz(A4)の音を出す
fs = 44100  # サンプリング周波数
seconds = 3  # 3秒間鳴らす

t = np.linspace(0, seconds, seconds * fs, False)
note = np.sin(frequency * t * 2 * np.pi)
audio = note * (2**15 - 1) / np.max(np.abs(note))  # 16ビットオーディオに変換
audio = audio.astype(np.int16)

play_obj = sa.play_buffer(audio, 1, 2, fs)
play_obj.wait_done()

このコードでは、まずnumpyとsimpleaudioをインポートしています。

次に音の周波数(ここでは440Hz)、サンプリング周波数(44100Hz)、音の持続時間(3秒)を定義します。

そして、numpyのlinspaceとsin関数を使って、指定した周波数と持続時間のサイン波を生成します。

生成したサイン波を16ビットオーディオに変換し、simpleaudioのplay_buffer関数を使って音を出力しています。

このコードを実行すると、3秒間440Hzの単一の音(A4)が鳴ります。

○方法2:メロディを演奏する

次に、Pythonで複数の音を鳴らしてメロディを演奏する方法を見ていきましょう。

この方法でも「simpleaudio」ライブラリを使用します。

□サンプルコード2

import numpy as np
import simpleaudio as sa

def play_tone(frequency, duration):
    fs = 44100
    t = np.linspace(0, duration, duration * fs, False)
    note = np.sin(frequency * t * 2 * np.pi)
    audio = note * (2**15 - 1) / np.max(np.abs(note))
    audio = audio.astype(np.int16)
    play_obj = sa.play_buffer(audio, 1, 2, fs)
    play_obj.wait_done()

notes = [(440, 0.5), (440, 0.5), (493.88, 0.5), (587.33, 1)]
for note in notes:
    play_tone(*note)

このコードでは、最初に指定した周波数と持続時間で音を鳴らすplay_tone関数を定義しています。

そして、メロディを形成するためのノートとその持続時間のリストを定義し、リストの各要素に対してplay_tone関数を実行してメロディを演奏しています。

このコードを実行すると、440Hzの音を0.5秒、493.88Hzの音を0.5秒、587.33Hzの音を1秒鳴らす、簡単なメロディが演奏されます。

○方法3:WAVファイルを再生する

Pythonを使用して音声ファイル、特にWAVファイルを再生する方法を解説します。

Pythonのwaveモジュールとpyaudioモジュールを使用することで、簡単にWAVファイルを再生することができます。

□サンプルコード3

import wave
import pyaudio

def play_wav(filename):
    wav_file = wave.open(filename, 'rb')
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(wav_file.getsampwidth()),
                    channels=wav_file.getnchannels(),
                    rate=wav_file.getframerate(),
                    output=True)

    data = wav_file.readframes(1024)
    while data:
        stream.write(data)
        data = wav_file.readframes(1024)

    stream.stop_stream()
    stream.close()
    p.terminate()

play_wav('test.wav')

このコードでは、waveとpyaudioモジュールを使ってWAVファイルを再生するplay_wav関数を定義しています。

関数では、まずwaveモジュールのopen関数で指定したファイルを読み込み、その後pyaudio.PyAudioオブジェクトを生成します。

次に、PyAudioオブジェクトのopenメソッドを用いて、WAVファイルのパラメータに基づいてオーディオストリームを開始します。

そして、1024フレームずつ音声データを読み込み、ストリームに書き込みます。

最後に、ストリームを停止し、閉じてPyAudioオブジェクトを終了します。

このコードを実行すると、指定したWAVファイル(ここでは’test.wav’)が再生されます。

○方法4:MP3ファイルを再生する

次に、PythonでMP3ファイルを再生する方法を見ていきましょう。

ここではpygameモジュールを使用します。

□サンプルコード4

import pygame

def play_mp3(filename):
    pygame.mixer.init()
    pygame.mixer.music.load(filename)
    pygame.mixer.music.play()

play_mp3('test.mp3')

このコードでは、pygameモジュールを使ってMP3ファイルを再生するplay_mp3関数を定義しています。

関数では、まずpygame.mixerモジュールのinitメソッドでミキサーを初期化し、次にloadメソッドでMP3ファイルを読み込みます。

最後に、playメソッドを呼び出して音楽を再生します。

このコードを実行すると、指定したMP3ファイル(ここでは’test.mp3’)が再生されます。

○方法5:マイク入力から音を出力する

次に、マイクからの入力をリアルタイムで出力する方法を説明します。

これにはPythonの標準ライブラリの一つであるpyaudioを使用します。

pyaudioは、マイクからの音声データを取得し、そのデータを出力することも可能です。

□サンプルコード5

import pyaudio

def mic_to_speaker():
    p = pyaudio.PyAudio()

    stream = p.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, output=True, frames_per_buffer=1024)

    while True:
        data = stream.read(1024)
        stream.write(data)

    stream.stop_stream()
    stream.close()
    p.terminate()

mic_to_speaker()

このコードでは、pyaudioを使ってマイク入力から音を出力するmic_to_speaker関数を定義しています。

関数内ではまず、pyaudio.PyAudioオブジェクトを生成します。

次に、PyAudioオブジェクトのopenメソッドを用いて、マイクからの音声入力とスピーカーへの音声出力を同時に可能にするオーディオストリームを開始します。

そして、無限ループ内で、1024フレームごとに音声データを読み取り、そのデータを即座に出力します。

このコードを実行すると、マイクからの音声がリアルタイムでスピーカーから出力されます。

つまり、このコードは基本的なエコー(反響)システムとして機能します。

○方法6:音の高さや音量を変更する

音楽や音声処理の分野では、音の高さや音量を調節することが必要になる場合があります。

Pythonを使用すれば、このような音声の操作も比較的簡単に実現できます。

ここでは、pydubというサードパーティ製のライブラリを使用します。

□サンプルコード6

from pydub import AudioSegment

def change_volume_pitch():
    sound = AudioSegment.from_file("test.wav")

    # 音量を10dB増加
    louder_sound = sound + 10

    # 音の高さを10半音上げる
    higher_pitch_sound = sound.speedup(playback_speed=1.05946309436)

    louder_sound.export("louder_test.wav", format='wav')
    higher_pitch_sound.export("higher_pitch_test.wav", format='wav')

change_volume_pitch()

このコードでは、pydubを使って音量と音高を変更するchange_volume_pitch関数を定義しています。

関数内でまず、pydub.AudioSegmentのfrom_fileメソッドを用いて音声ファイルを読み込みます。

次に、”+”演算子を使用して音量を10dB増加させます。

その後、speedupメソッドを使用して音の高さを10半音上げます。

最後に、変更した音声を新たなファイルとしてエクスポートします。

このコードを実行すると、指定したWAVファイルの音量が10dB増加した音声ファイルと、音の高さが10半音上がった音声ファイルが出力されます。

○方法7:音をループさせる

最後に、音をループさせる方法を見ていきます。

ここでもpydubを使用します。pydubは音声のループ再生をサポートしています。

□サンプルコード7

from pydub import AudioSegment
from pydub.playback import play

def loop_sound():
    sound = AudioSegment.from_file("test.wav")

    # 音声を3回ループ
    loop_sound = sound * 3

    play(loop_sound)

loop_sound()

このコードでは、pydubを使って音声をループさせるloop_sound関数を定義しています。

関数内でまず、pydub.AudioSegmentのfrom_fileメソッドを用いて音声ファイルを読み込みます。

次に、”*”演算子を使用して音声を3回ループさせます。

最後に、pydub.playbackのplayメソッドを用いてループさせた音声を再生します。

このコードを実行すると、指定したWAVファイルが3回ループして再生されます。

●Pythonで音を鳴らす際の注意点と対策

Pythonで音を鳴らす際には、いくつかの注意点があります。

まず、使用するライブラリによっては、特定の音声形式(WAVやMP3など)しかサポートしていない場合があります。

そのため、使用する音声ファイルの形式に注意が必要です。

また、音をリアルタイムで処理する場合(マイク入力からのリアルタイム出力など)、パフォーマンスが重要になります。

リアルタイム処理が遅延すると、音の途切れや遅延が発生します。

これを解決するためには、音声データのバッファリングや、必要に応じて高速な処理が可能なC言語等を併用する等の対策が考えられます。

さらに、音量や音高を調整する際には、音声データのクリッピング(音声波形が上限や下限を超えること)に注意が必要です。

音量を無闇に上げると、クリッピングが発生し、音質が低下する可能性があります。

●Pythonの音響制御の応用例

Pythonで音を鳴らす方法を学んだら、それをどのように活用するかを考えてみましょう。

いくつかの具体的な応用例を紹介します。

○ゲーム開発での利用

Pythonはゲーム開発にもよく使われています。

音響制御はゲームの体験を豊かにする重要な要素です。

背景音楽の再生や効果音の出力、キャラクターの声の制御など、Pythonの音響制御はゲーム開発で多岐にわたって活用できます。

○ウェブアプリケーションでの利用

ウェブアプリケーションでも音響制御は重要です。

ウェブサイト上での音楽や動画の再生、通知音の出力など、音響制御はユーザー体験を向上させる役割を果たします。

Pythonを用いたバックエンドで音声ファイルを処理し、その結果をウェブアプリケーションに組み込むことが可能です。

○音楽制作での利用

音響制御はもちろん、音楽制作にも活用できます。

Pythonを使って音楽の生成、編集、ミキシングなどを行うことができます。

また、音楽理論をコードに落とし込むことで、新たな音楽表現の開拓も可能です。

以上、Pythonで音を鳴らす方法とその応用例について紹介しました。

これらの方法と応用例を理解し、自身のプロジェクトに適用することで、Pythonで音響制御を行う能力を磨くことができます。

ここで紹介した以外にも、Pythonで音響制御を活用する可能性は無限大です。

自身のニーズに合わせて、適切なライブラリと方法を選び、応用してみてください。

まとめ

Pythonは音響制御のための強力なツールであり、その可能性は広大です。

この記事では、Pythonで音を鳴らす7つの基本的な方法と、それらを活用する具体的な例を紹介しました。

これらの知識を使って、Pythonで音響制御を行うスキルを磨き、自身のプロジェクトに生かしてみてください。