ラジオ局をストリーミングし、時間ベースで別のチャンネルに切り替えてから、一定期間後に元のストリームに戻るストリーミング アプリがあります。ライブ ストリーム オーディオに、1 時間に 1 回発生し、一定期間切り替える特定のサウンドが含まれているかどうかを認識する最良の方法は何でしょうか。
この問題のサブセットは、 からのオーディオのライブ ストリーム内のオーディオ クリップをどのように認識するかですpython-vlc
。sample.mp3
最後の 10 秒には、サンプルに含まれるものが含まれているとします。
保存された 2 つの異なる mp3 (つまり、FFT を使用) に対してそれを行う方法は知っていますが、python-vlc からのライブストリームでそれを行う方法はわかりません。多くのパッケージではオーディオのストリーミングが許可されておらず、録音されたファイルのみが許可されているため、現在、ライブストリームにアクセスして波形を比較することさえできないようです。
問題の主な機能はここにありますが、これまでのパッケージはここにあります:
def set_station(self,station):
# Return if already playing selected station
if station == self.playing:
return
if station == "JJ":
self.url = 'http://live-radio01.mediahubaustralia.com/4DJW/mp3/'
elif station == "JJJ":
self.url = 'http://live-radio01.mediahubaustralia.com/4TJW/mp3/'
# Define VLC media
self.media=self.instance.media_new(self.url)
#self.media.add_option("sout=file/ts:sample.mp3")
# Set player media
self.player.set_media(self.media)
# Play the media
self.player.play()
# Set playing station
self.playing = station
def switcher(self):
# Current time and hour
current_time = dt.datetime.now()
current_hour = int(current_time.hour)
# Check if time is between 59th minute and 3rd minute after the hour
mhour = is_now_between_time_periods(dt.time(current_hour,59,50),
dt.time(current_hour,3,30),
current_time.time())
# Is between 6 and 9am create a half hour window
if current_hour >= 6 and current_hour <= 9:
mhalf = is_now_between_time_periods(dt.time(current_hour,30,50),
dt.time(current_hour,33,30),
current_time.time())
mwindow = mhalf or mhour
else:
mwindow = mhour
# //////////////////////////////////////////
# Rather than time based, I'm after a parsing
# of the stream to find a sequence of
# audio similar to e.g. "sample.mp3".
# e.g. if cosine_similarity(sample.mp3",stream) > 0.7:
# //////////////////////////////////////////
# If satisfied then switch to Triple J (JJJ)
if mwindow:
self.set_station("JJJ")
else:
self.set_station("JJ")
1 つの考えは、self.media.add_option("sout=file/ts:stream.mp3")
python-vlc 内のモジュールを使用してオーディオ ファイルにストリーミングし、そのファイルを事前に解析する遅延を使用して再生することでしたが、常により多くのデータを取り込んでいるため、to file ストリームをロードできませんちゃんと。