2016-04-11 20 views
0

Bu sayfayı resample audio buffer from 44100 to 16000 numaralı telefonu, sabit bir arabellekden yeniden örneklendirmek için offlineAudioContext kullanarak gördüm. Sesi bir akıştan yeniden örneklemenin bir yolu var mı? Benim yapmak istediğim mikrofondan ses yakalamak, düşük bit hızına yeniden örneklemek ve gerçek zamanlı olarak sunucumuza yüklemek.Yakalanan ses akışını offlineAudioContext ile yeniden örnekleme

+0

Böyle yavaş bir örnekleme hızı kullanmak istediğiniz bir neden var mı? Sadece bant genişliğini azaltmaya çalışıyorsanız, bit derinliğinde bir azalma çok daha iyi bir fikirdir. Web Audio API, float32 örneklerini kullanır. 16-kHz'de 16-bit örneklerle 8,1 bitlik 44.1 kHz'de çok daha iyi sonuçlar elde edebilirsiniz. – Brad

+0

Evet. Tarayıcıya konuşan cihazlar, yalnızca ADPMC'de kodlanmış 8K örnekleme oranını bilir ve bu, örnek başına 4 bittir. Bunun da ötesinde, içinde bulunduğumuz çevrenin, gerçek zamanlı sesleri (yalnızca konuşmalar) günde 24 saat eş zamanlı olarak bulut sunucularına yükleyen birkaç yüz kullanıcısı var. Yani evet, düşük bant genişliği kesinlikle bir gereklilik. 8 bitlik örnek üzerinde iyi fikir. Sunucu tarafında gerçek zamanlı olarak aşağıya doğru örnekleyebiliriz ve ekibimin çoğu C, C++ insanlarından oluştuğu için işi daha kolay hale getirir. – user2600798

+0

Geliştiricileriniz Emscripten hakkında bilgi sahibi mi? https://kripken.github.io/emscripten-site/ – Brad

cevap

0

Yapmanız gereken, bir ScriptProcessorNode oluşturmak ve sonra geri çağrılarınızla arandığında arabellekleri yeniden örneklemektir.

var scriptNode = context.createScriptProcessor(4096, 1, 1); 
scriptNode.onaudioprocess = function onAudioProcess(e) { 
    // e.inputBuffer contains what you want 
}; 
+0

Cevabınız için teşekkür ederiz. Bunu yapmadan önce TÜM örnek verilere sahip olmalı mıyım? Bunu gerçek zamanlı olarak yapmaya çalışıyorum, 30 dakikalık ses kaydını kaydetme ve yeniden örnekleme. Ayrıca, webrtc özellikleri, geri aramaların ne sıklıkta gerçekleştiğini göstermez. – user2600798

+0

@ user2600798 Hayır, ScriptProcessorNode için bağlandığım belgeleri okuyun. Oluştururken ilk parametre, örneklerde arabellek boyutunu gösterir. 4.096'a ayarlanarak, geri çağrı her 4.096 örnekte ateşlenecektir. 2,048 ve 4,096'nın çoğu genel kullanım için gecikme ve performans açısından iyi birer avantaj olduğunu düşünüyorum. Gerekirse indirebilir veya uygunsa yükseltebilirsiniz. WebRTC özelliğinin bununla hiçbir ilgisi yok ... Bu Web Ses API'sı. – Brad

+0

Temizlediğiniz için teşekkürler. Ancak bu, bir seferde yalnızca bir örnekleme yapabilir. Bir paketin sonundaki bilgiler bir sonraki pakete taşınmaz, bu nedenle son seste çok fazla anormal bir durum söz konusudur. – user2600798

İlgili konular