我有一组声音文件,对应于特定钢琴演奏的特定键。 如果我在一台设备上播放特定序列中的某些文件,我怎样才能让另一台设备识别该序列呢?
请记住,这些不是任何吉他或钢琴或长笛演奏的任意音符。这些是两个设备上都可用的特定文件 - 因此只需通过听音频,我如何确定正在播放的文件序列?
我愿意使用特定文件,如果它更容易识别。目标不是解码任何类型的音乐或任何东西 - 它通过按顺序播放两个设备共有的音频文件将数据从一个设备传输到另一个设备。音频文件并不特别 - 我可以使用任何易于识别的特定音频。
我对FFT或信号处理一无所知,但我有很多编程经验,所以只是想知道如何开始......
编辑:我不关心实际节点是什么,我只关心如果我在第一台设备上播放文件“C”,我可以将它与第二台设备上的相同文件匹配。实际文件不是用户创建的 - 我只想弄清楚如何仅使用音频传输少量数据。我愿意使用任何可以轻松完成工作的声音文件。
编辑:我想仅使用音频在两个设备之间传输数据 - 每个设备上声音文件的目的只是编码数据 - 例如,如果我有一组文件{a,b,c,d ,e,f,g,h,i,j},也许每个声音文件可以对应一个数字{0,1,2,3,4,5,6,7,8,9},并使用该映射我可以代表数据...每个设备上的文件都是相同的......所以为了表示“123”,也许我会在第一台设备上播放“abc”......答案 0 :(得分:1)
对于非常短的声音,匹配过滤可能有效。对于更长的时间(音乐?),使用术语“声音指纹”或“音乐指纹”进行搜索,这可能涉及学习提取和匹配MFCC特征向量。
补充:如果您可以弥补发送数据的声音,那么请查找声学数据调制解调器通过电话线使用的协议。使用FSK或QPSK等波特率为300至1200波特。或者更高的数据速率取决于信噪比和设备之间的声学环境(可靠带宽)。