Я пытался преобразовать аудиоданные в данные частотной области, отредактировать эти данные и восстановить звук из этих данных.
Я следовал инструкциям:
-
OfflineAudioContext
для получения буфера для выполнения анализа, AnalyserNode
для выполнения анализа и PeriodicWave
, чтобы восстановить волну.
Звук, воспроизводимый OfflineAudioContext
, должен соответствовать звуку PeriodicWave
, но это явно не так. В инструкции сказано, что так и должно быть, поэтому я явно что-то упускаю.
(Кроме того, я не знаю, что использовать для ввода действительного и мнимого значений PeriodicWave
. Из инструкций действительные значения - синусы, а мнимые - косинусы, поэтому я установил все мнимых значений до 0, так как у меня нет косинусных значений из анализа БПФ от AnalyserNode
, и, похоже, другого пути нет.)
До сих пор самым простым и близким, что я получил, является следующее скрипт (https://jsfiddle.net/k81w04qv/1/):
<code><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width">
<title>Audio Test</title>
<link rel="stylesheet" href="">
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<h1>Audio Test</h1>
<button id='0'>Play original sound</button>
<button id='1'>Play reconstructed sound</button>
<pre>
switch (канал) {case 0: var freq = 200 + 10 * freqSin (9, время) ;; var amp = 0,7; var output = amp * Math.sin (freq * (2 * pi) * time); перемена; случай 1: var freq = 900 + 10 * freqSin (10, время); var amp = 0,7; var output = amp * Math.sin (freq * (2 * pi) * time); перемена; } //console.log(output) return output; }
Интересная дополнительная проблема этого сценария заключается в том, что после воспроизведения исходного звука вы не можете воспроизводить восстановленный звук (хотя вы можете воспроизводить оригинальный звук как сколько бы вы хотели). Чтобы воспроизвести восстановленный звук, вы должны сначала воспроизвести его, затем он будет воспроизводиться только по refre sh. (Вы также можете воспроизвести его после воспроизведения оригинального звука, если воспроизводите его во время воспроизведения оригинального звука.)