2014-03-31 54 views
5

我正在嘗試創建一種在短信中生成聲音的方法。這給了我一個「不能調用方法'的null」的createScriptProcessor'?如何在WebAudio中使用AudioContext

是否應該創建JAudioContext?

... 

AudioContext : JAudioContext; 
node   : JScriptProcessorNode; 

... 

procedure TForm1.W3Button1Click(Sender: TObject); 
var bufferSize : integer; 
    lastOut : float; 
    input,output : JFloat32Array; 
begin 
    bufferSize := 4096; 
    lastOut := 0; 
    node := AudioContext.createScriptProcessor(bufferSize, 1, 1); 
    node.onaudioprocess := procedure (e: JAudioProcessingEvent) 
    var i : integer; 
    begin 
    input := e.inputBuffer.getChannelData(0); 
    output := e.outputBuffer.getChannelData(0); 
    for i := 0 to bufferSize-1 do 
    begin 
     output[i] := (input[i] + lastOut)/2.0; 
     lastOut := output[i]; 
    end; 
    end; 
end; 
+1

這是什麼語言? –

+0

@KevinEnnis語言是「Smart Pascal」。對[tag:Smart-Mobile-Studio]的描述會給你一個提示;-) –

+0

[tag:JavaScript](可能)被添加爲標籤,因爲Smart-Mobile-Studio項目被編譯爲HTML5 + JavaScript。因此,問題的原因可能與HTML5或JavaScript相關,而不僅僅是編碼語言。 –

回答

7

此刻,您仍然需要一些JavaScript解決方法來獲取創建的音頻上下文。

喜歡的東西

var AudioContext: JAudioContext; 

procedure InitializeAudioContext; 
begin 
    asm 
    // Fix up for prefixing 
    window.AudioContext = window.AudioContext||window.webkitAudioContext; 

    if('webkitAudioContext' in window) { 
     @AudioContext = new webkitAudioContext(); 
    } 
    end; 
end; 

注:單位w3c.WebAudio基本上只是對W3C API的包裝,不包含代碼來獲取初始化的音頻內容。到目前爲止,這必須在代碼中完成(如上所示)。

爲了將來我們計劃有更高層次的抽象。

即將推出的2.1版本將包含另一個關於Web Audio API和改進的「正弦發生器」示例的特色示例。計劃在四月/五月發佈。

更新1:

另外,您可以使用此代碼實例化您的背景:

AudioContext := new JAudioContext; 

然而,它並不適用於舊的基於WebKit的瀏覽器。這些需要額外的webkit前綴。

在這種情況下是這樣的:

type 
     JWebkitAudioContext = class external 'webkitAudioContext' (JAudioContext); 

AudioContext := new JWebkitAudioContext; 

會工作。

由於兼容性的原因,您可能需要檢查前綴是否有必要。或者只是使用上面提到的「asm」片段。

更新2:

埃裏克只寫了我如何做帕斯卡爾代碼檢查電子郵件。雖然它仍然有點難看,但它避免了asm部分。

首先聲明webkitAudioContext,然後檢查它是否分配:

var webkitAudioContext external 'webkitAudioContext' : JwebkitAudioContext; 
var hasWebkitAudio := Boolean(Variant(webkitAudioContext)); 
+0

音頻使用的一些更高級別的抽象將非常棒! – Shannon

+0

這絕對是在隊列中的一些文章... – CWBudde

+0

「AudioContext:= new JAudioContext;」作品,但現在我期待着更新! :-) – Flemming