2013-02-16 39 views
5

Tôi đang cố gắng tạo điều khiển xoay vòng tùy chỉnh bằng API âm thanh trên web nhưng tôi không thể nhận được bất kỳ âm thanh nào thoát ra khỏi kênh phù hợp bằng cách sử dụng bộ tách kênh và nút hợp nhất:Âm thanh trên web: Không có âm thanh nào trong kênh bên phải

var context = new webkitAudioContext(), 
    destination = context.destination, 
    osc = context.createOscillator(), 
    gainL = context.createGainNode(), 
    gainR = context.createGainNode(), 
    splitter = context.createChannelSplitter(2), 
    merger = context.createChannelMerger(2); 

osc.frequency.value = 500; 

osc.connect(splitter); 

splitter.connect(gainL, 0); 
splitter.connect(gainR, 1); 

gainL.connect(merger, 0, 0); 
gainR.connect(merger, 0, 1); 

osc.noteOn(0); 

gainL.gain.value = 0.1; 
gainR.gain.value = 0.5; 

osc.noteOff(2); 

merger.connect(destination); 

Tôi có thiếu thứ gì đó hiển nhiên ở đây không? Có bản xem trước JSBin về mã ở trên tại đây: http://jsbin.com/ayijoy/1/

Tôi đang chạy Chrome v24.0.1312.57, chỉ trong trường hợp sử dụng bất kỳ.

Trả lời

2

Dự đoán tốt nhất của tôi là điều này xảy ra vì Oscillator cho ra tín hiệu đơn âm. Hãy thử sử dụng nguồn âm thanh nổi và có thể bạn sẽ có nhiều may mắn hơn.

Edit:. Dưới đây là cách bạn có thể pan một "mono" tín hiệu (bypass splitter, vì không có tín hiệu âm thanh stereo để phân chia, và kết nối bộ dao động trực tiếp đến hai lợi nhuận Sau đó kết nối hai tín hiệu mono để việc sáp nhập sau điều chỉnh mức tăng cho mỗi kênh) http://jsbin.com/ayijoy/16/

+0

Đó là một giải pháp tốt đẹp, cảm ơn; hóa ra tôi đã bỏ lỡ điều gì đó hiển nhiên sau tất cả. – SquareFeet

+0

Điều đó nói rằng, mặc dù, tôi nghĩ rằng trộn lên từ mono -> stereo được tự động thực hiện khi kết nối một nguồn mono đến một điểm đến âm thanh nổi. Thông số ở đây không rõ ràng: http://www.w3.org/TR/webaudio/#UpMix Cân nhắc việc kết nối bộ dao động trực tiếp với nút đích: âm thanh sẽ phát trong cả hai kênh L và R, gợi ý tự động trộn; Tôi đã nghĩ như vậy sẽ xảy ra trong kịch bản câu hỏi của tôi ... – SquareFeet

+0

Nói chung, upmixing không xảy ra tự động. Tuy nhiên, nút Splitter là cho bạn để gây rối với tín hiệu trực tiếp, do đó, nó không. Từ thông số: '[AudioSplitterNode] có một đầu vào duy nhất và một số đầu ra "hoạt động" bằng với số kênh trong luồng âm thanh đầu vào. ... Bất kỳ đầu ra nào không "hoạt động" sẽ tạo ra sự im lặng và thường sẽ không được kết nối với bất kỳ thứ gì. ' – cwilso

Các vấn đề liên quan