gpt4 book ai didi

javascript - 如何使用 Javascript “autotune” 录制声音

转载 作者:行者123 更新时间:2023-11-30 13:02:23 26 4
gpt4 key购买 nike

多亏了 Cordova,我才得以像录音机一样录制和播放我的声音。现在我想在我的声音上添加“Autotune”或“Vocoder”效果,我该怎么做?

PS:我在移动设备上工作。

这是录制和播放我的声音的脚本:

<script type="text/javascript" charset="utf-8" src="cordova-1.7.0rc1.js"></script>
<script type="text/javascript" src="jquery-1.7.1.js"></script>

<script type="text/javascript">

var deviceready = false;
var mediaVar = null;
var recordFileName = "recording.wav";
var status = null;
var isIOS = false;

function onBodyLoad()
{
document.addEventListener("deviceready", onDeviceReady, false);
deviceready = true;
}

$(document).ready(function(){
$("#stopBtn").hide();
$("#playBtn").hide();

//validation to check if device is ready is skipped

$("#recordBtn").click(function(){
record();
});

$("#playBtn").click(function(){
play();
});

$("#stopBtn").click(function(){
stop();
});
});

function record()
{
createMedia(function(){
status = "recording";
mediaVar.startRecord();
$("#recordBtn").hide();
$("#stopBtn").show();
$("#playBtn").hide();
},onStatusChange);
}

function createMedia(onMediaCreated, mediaStatusCallback){
if (mediaVar != null) {
onMediaCreated();
return;
}

if (typeof mediaStatusCallback == 'undefined')
mediaStatusCallback = null;

if (isIOS) {
//first create the file
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
fileSystem.root.getFile(recordFileName, {
create: true,
exclusive: false
}, function(fileEntry){
log("File " + recordFileName + " created at " + fileEntry.fullPath);
mediaVar = new Media(fileEntry.fullPath, function(){
log("Media created successfully");
}, onError, mediaStatusCallback); //of new Media
onMediaCreated();
}, onError); //of getFile
}, onError); //of requestFileSystem
} else //it's Android
{
mediaVar = new Media(recordFileName, function(){
log("Media created successfully");
}, onError, mediaStatusCallback);
onMediaCreated();
}
}

function stop()
{
if (mediaVar == null)
return;

if (status == 'recording')
{
mediaVar.stopRecord();
log("Recording stopped");
}
else if (status == 'playing')
{
mediaVar.stop();
log("Play stopped");
}
else
{
log("Nothing stopped");
}
$("#recordBtn").show();
$("#stopBtn").hide();
$("#playBtn").show();
status = 'stopped';
}

function play()
{
createMedia(function(){
status = "playing";
mediaVar.play();
$("#recordBtn").hide();
$("#stopBtn").show();
$("#playBtn").hide();
});
}

function onStatusChange()
{
if (arguments[0] == 4) //play stopped
{
$("#recordBtn").show();
$("#stopBtn").hide();
$("#playBtn").show();
}
}

function onSuccess()
{
//do nothing
}

function onError(err)
{
if (typeof err.message != 'undefined')
err = err.message;
alert("Error : " + err);
}

function log(message)
{
if (isIOS)
console.log(message);
else
console.info(message);
}

function onDeviceReady()
{

}

</script>

最佳答案

音高检测和操纵(Autotune 是实现它的 Anteres Audio Technology 产品的品牌名称)是一个计算密集型的硬数字信号处理问题 (DSP)。

DPS Dimension这里提供了一个关于音高操作的很好的教程,但它远不是一个完整的解决方案。

如果没有强大的 DSP 学术背景,您不太可能在这方面取得很大进展。现有的实现是专有的,通常用 C++ 实现。这个问题领域也有很多专利。一种选择可能是使用许可组件在服务器端实现音频处理。

在 Javascript 中实现 Vocoder 可能更幸运——复杂性较低,并且公共(public)领域中有大量算法可供尝试。

关于javascript - 如何使用 Javascript “autotune” 录制声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16934189/

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