gpt4 book ai didi

javascript - 在样本中找到最主要的音频频率

转载 作者:IT老高 更新时间:2023-10-28 23:17:31 25 4
gpt4 key购买 nike

我正在尝试创建一个项目,该项目从 Internet 中提取实时流音频文件,并不断对音频进行采样,以寻找给定时间段内最主要的频率。这个想法是,如果它在一段时间(几秒钟)内检测到比方说 440Hz 的频率,这意味着在直播中播放了特定的音调。一旦它检测到特定的音调,我就会让它在程序中做一些其他的事情。直播要么是说话,要么是单音,要么是静音。

我能够做到这一点,并通过阅读我从在线音调发生器生成的文件获得了概念验证。当我传入该文件时,它会正确识别频率(仅关闭 1 或 2 Hz)。当我拉入实时流时,我得到的频率数据类似于:17704Hz。我的猜测是它来自直播的“噪音”。

我正在使用 npm 模块 node-pitchfinderaudio-analyer 进行大部分处理

关于如何获得单音的任何想法?

const fs = require('fs');
const fsa = require('fs-extra');
const Lame = require('lame');
const Speaker = require('speaker');
const Volume = require('pcm-volume');
const Analyser = require('audio-analyser')
const request = require('request')
const Chunker = require('stream-chunker');
const { YIN } = require('node-pitchfinder')
const detectPitch = YIN({ sampleRate: 44100})
//const BUFSIZE = 64;
const BUFSIZE = 500;


var decoder = new Lame.Decoder();
decoder.on('format', function(format){onFormat(format)});

var chunker = Chunker(BUFSIZE);
chunker.pipe(decoder);




var options = {
url: 'http://relay.broadcastify.com/fq85hty701gnm4z.mp3',
headers: {
"Upgrade-Insecure-Requests": 1,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15"
}
}
var audio_stream = request(options);
//var audio_stream = fs.createReadStream('./2000.mp3');

audio_stream.pipe(chunker);

function onFormat(format)
{
//if (volume == "undefined")
volume = 1.0;

vol = new Volume(volume);
speaker = new Speaker(format);


analyser = createAnalyser(format);
analyser.on('data', sample);

console.log(format);
vol.pipe(speaker);
vol.pipe(analyser);
decoder.pipe(vol);
vol.setVolume(volume);
}




function createAnalyser(format)
{
return new Analyser({
fftSize: 8,
bufferSize: BUFSIZE,
'pcm-stream': {
channels: format.channels,
sampleRate: format.sampleRate,
bitDepth: format.bitDepth
}
});
}


var logFile = 'log.txt';
var logOptions = {flag: 'a'};

function sample()
{

if (analyser) {

const frequency = detectPitch(analyser._data)
console.log(frequency)
}
}

最佳答案

您可能需要:

  • 应用降噪效果来滤除来自音频源的噪音(查看 noise-gate 包)

  • 在治疗前使用压缩器和/或限制器优化您的声音(查看 audio-object

音频信号处理之前。

关于javascript - 在样本中找到最主要的音频频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53684267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com