2017-10-25 18 views
1

私はpython newbieとaudio analysis newbieです。これがこの質問の正しい場所でない場合は、私に正しい場所を指摘してください。mp3/wavファイルのmatplotlibプロットのさまざまな色を解釈する方法

私はただ静かなmp3オーディオファイルを持っています。 SOX法に使用した.wavに変換 この画像を生成 sox input.mp3 output.wav

from scipy.io.wavfile import read 
import matplotlib.pyplot as plt 
(fs,x)=read('/home/vivek/Documents/VivekProjects/Silence/silence.wav') 
##plt.rcParams['agg.path.chunksize'] = 5000 # for preventing overflow error. 
fs 
x.size/float(fs) 
plt.plot(x) 

enter image description here

また、私はこの質問へのソリューションを使用:How to plot a wav file

from scipy.io.wavfile import read 
    import matplotlib.pyplot as plt 

    # read audio samples 
    from scipy.io.wavfile import read 
import matplotlib.pyplot as plt 

# read audio samples 
input_data = read("/home/vivek/Documents/VivekProjects/Silence/silence.wav") 
audio = input_data[1] 
# plot the first 1024 samples 
plt.plot(audio) 
# label the axes 
plt.ylabel("Amplitude") 
plt.xlabel("Time") 
# set the title 
plt.title("Sample Wav") 
# display the plot 
plt.show() 

この画像を生成:

enter image description here

質問:私はチャートに(青、緑、黄)異なるカラーバーを解釈する方法を知りたい 。あなたがファイルを聞くならば、それはただの沈黙であり、何かがあれば私はただの線だけを見ることを期待していました。

私のmp3ファイルはhereからダウンロードできます。
soxで変換されたwavファイルはhereです。

ファイルがサイレントであっても、ドロップボックスでも波形が生成されています。私は理由を理解できないようだ。

+1

何も聞こえないからといって、それが_complete_ silenceであるとは限りません。 – DavidG

答えて

3

まず、プロットする前に必ずデータの形状を確認してください。

x.shape 
## (3479040, 2) 

ここで2は、.wavファイルに2つのチャンネルがあることを意味します。デフォルトでは、matplotlibは異なる色でプロットします。この状況では、行ごとにスライスする必要があります。

グラフから分かるように、信号は絶対値(-3,3)が非常に低い。 .wavファイル(整数または浮動小数点数)のエンコーディングに応じて、それは振幅に変換されます(しかし、おそらく非常に低い振幅、それは静かです)。

私の自己は、正確なエンコーディングに精通していません。しかし、このページには役立つかもしれない:PCM以外のすべての形式についてはhttp://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

  1. は、フォーマットチャンクは、拡張部分を持っている必要があります。拡張子は長さがゼロですが、サイズが フィールド(値が0)でなければなりません。
  2. フルスケールは1です。ビット/サンプルは通常32または64です。
  3. ログPCM形式(μ-lawおよびA-law)の場合、Rev. 3のマニュアルには、ビット/サンプルフィールド(wBitsPerSample) は8ビットに設定する必要があります。
  4. 非PCM形式には、ファクトチャンクが必要です。

    time_series histogram

    PS

:あなたはいくつかのより高度なオーディオ分析を開始したい場合は、私は特にエネルギー部とFFTの一部、超実用的な見つけ、この workshopをチェックします。

+0

申し訳ありませんが分かりません。 「高頻度」でプロットすることによって意味されるもの。私はプロットに多色のピークがある理由を知りたい。また、Dropboxのファイルを見ると、波形も生成されます。なぜそれが起こっているのかについてのヒント。 –

+1

ヒストグラムを使って散布図を見せてくれる、+1。 – DavidG

+0

アドバイスは@DavidG – shouldsee

1

silence.mp3ファイルは、最大スピーカー音で再生しても聞こえないため、非常に低い(人間の聴力より低い)オーディオがあるという疑いがありました。

だから、私は最初に私たちがwavmp3オーディオを変換here

からmp3からの音声周波数をプロットするに出くわしました。親ファイルはsteroなので、変換されたwavファイルもステレオです。オーディオ周波数があることを実証するためには、ただ一つのチャンネルが必要です。 単一チャンネルwavオーディオを取得したら、dBパワーレベルのtimeインデックスに対してfrequencyのプロットを単にプロットします。

import scipy.io.wavfile 
from pydub import AudioSegment 
import matplotlib.pyplot as plt 
import numpy as np 
from numpy import fft as fft 

#read mp3 file 
mp3 = AudioSegment.from_mp3("silence.mp3") 
#convert to wav 
mp3.export("silence.wav", format="wav") 
#read wav file 
rate,audData=scipy.io.wavfile.read("silence.wav") 


#if stereo grab both channels 
channel1=audData[:,0] #left 
#channel2=audData[:,1] #right channel, we dont need here 


#create a time variable in seconds 
time = np.arange(0, float(audData.shape[0]), 1)/rate 

#Plot spectrogram of frequency vs time 
plt.figure(1, figsize=(8,6)) 
plt.subplot(211) 
Pxx, freqs, bins, im = plt.specgram(channel1, Fs=rate, NFFT=1024, cmap=plt.get_cmap('autumn_r')) 
cbar=plt.colorbar(im) 
plt.xlabel('Time (s)') 
plt.ylabel('Frequency (Hz)') 
cbar.set_label('Intensity dB') 
plt.show() 

あなたが画像で見ることができるように、silence.mp3は-30 -45デシベルの電力レベルで可能なオーディオ周波数を含んでいます。 enter image description here

+0

を採用していますが、 'audData'には何が保存されていますか? –

+0

オーディオサンプルはnumPar配列として 'audData'に保存されます。 audData - > 配列([[0、0]、 [0、0]、 [0、0]、 )のように 'type(audData)' - >

+0

Sir、私はそれが振幅またはデシベルまたはパワーであることを意味しました。 audData? –

関連する問題