Help us understand the problem. What is going on with this article?

音声分析ド素人が逆位相ミュージックを聞いたら、そこに訪れたのは混乱とそして静寂だった

音声分析のプログラミングに興味があったものの書いたことがないのでやってみました。

ド素人ですが、以下のことは知ってるので、音楽を逆位相にしたらどうなるかを聞いてみたくてやってみました。

  • 音は波である
  • 位相を反転して合成すると打ち消し合う

最初Goで書こうと思いましたが、いい感じのパッケージがないので諦めました。
٩(๑òωó๑)۶いつか書いてやんよ

pythonで pydub というやりたいことが全部入りな感じのライブラリがあったのでこれを使用しました。
さすがPython。
分析系はお強いですね

実際に書いてみた

バンバンバンバンバンバンバン
バン     バンバンバン
バン (∩`・ω・) バンバン
 _/_ミつ/ ̄ ̄ ̄/
   \/___/ ̄ ̄

準備

# pydubで使っているようなので
brew install ffmpeg

pip install pydub

# 波形をプロットするのに使います
pip install matplotlib

利用したデータ
ショパン:ワルツ第6番 変ニ長調 Op.64-1 《子犬のワルツ》
http://classical-sound.seesaa.net/article/211557687.html
短い曲だったら何でも良かった

最初にやったこと

とりあえず当初の目的だった逆位相ミュージックを聞いてみました。

from pydub import AudioSegment
from pydub.playback import play

#Load an audio file
myAudioFile = "test.mp3"
sound1 = AudioSegment.from_mp3(myAudioFile)

# Invert phase of audio file
sound2 = sound1.invert_phase()

# play audio data
play(sound2)

( ゚д゚)ポカーン (listen now...)

\(^o^)/ ... 違いがよくわかんない!!
\(^o^)/ ... もしかして書き方が良くなかったのか!?

よくわからなかったので、波形をプロットしてみた

from pydub import AudioSegment
from pydub.playback import play
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")

#Load an audio file
myAudioFile = "test.mp3"
sound1 = AudioSegment.from_mp3(myAudioFile)

plot audio data
data = np.array(sound1.get_array_of_samples())
x = data[::sound1.channels]
plt.plot(x[::100000])
plt.grid()
plt.show()

# Invert phase of audio file
sound2 = sound1.invert_phase()

plot audio data
data = np.array(sound2.get_array_of_samples())
xr = data[::sound2.channels]
plt.plot(xr[::100000])
plt.grid()
plt.show()

入力したデータ
Figure_1.png

逆位相にしたもの
Figure_2.png

確かに位相が反転されてそうです。

本当に逆位相なのか?

それでも不安だったので、音楽データを合成してみました。
本当に逆位相なのであれば、入力した音楽データと逆位相にしたデータを合成すると無音になるはず!!

from pydub import AudioSegment
from pydub.playback import play

#Load an audio file
myAudioFile = "test.mp3"
sound1 = AudioSegment.from_mp3(myAudioFile)

# Invert phase of audio file
sound2 = sound1.invert_phase()

#Merge two audio files
combined = sound1.overlay(sound2)

# play audio data
play(combined)

あっ、 無音や!! Σ(゚□゚)

合成後のプロット結果

Figure_3.png

最終形態

from pydub import AudioSegment
from pydub.playback import play
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")

#Load an audio file
myAudioFile = "test.mp3"
sound1 = AudioSegment.from_mp3(myAudioFile)

plot audio data
data = np.array(sound1.get_array_of_samples())
x = data[::sound1.channels]
plt.plot(x[::100000])
plt.grid()
plt.show()

# play
play(sound1)

# Invert phase of audio file
sound2 = sound1.invert_phase()

plot audio data
data = np.array(sound2.get_array_of_samples())
xr = data[::sound2.channels]
plt.plot(xr[::100000])
plt.grid()
plt.show()

# play audio data
play(sound2)

# Export merged audio file
sound2.export("invert_phase.mp3", format="mp3")

#Merge two audio files
combined = sound1.overlay(sound2)

data = np.array(combined.get_array_of_samples())
xr = data[::combined.channels]
plt.plot(xr[::100000])
plt.grid()
plt.show()

# play audio data
play(combined)

# #Export merged audio file
combined.export("combined.mp3", format="mp3")

結論

なんか違和感があるものの、逆位相ミュージックは聞いただけでは違いがわかりませんでした。
もうちょっと勉強して出直します。
記事をなぞると再現できると思うので、興味のある方はやってみてください

usk81
お仕事内容:プログラマ & たまにインフラ & SEOラングラー & データアナリスト & データサイエンティスト見習い & バリスタじゃないけど、コーヒー淹れる人 & 農家から買い付けて日本茶淹れる人
https://usk81.dev
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした