ज्यादातर सुरक्षा कारणों से, मुझे किसी ब्राउज़र द्वारा सर्वर पर एक्सेस करने के लिए सर्वर पर WAV फ़ाइल स्टोर करने की अनुमति नहीं है। मेरे पास एक बाइट सरणी है जिसमें सेवर पर ऑडियो डेटा (डब्ल्यूएवी फाइल का मान हिस्सा है) का डेटा हिस्सा है, और मैं जावास्क्रिप्ट (या ऐप्पल लेकिन जेएस पसंदीदा) के माध्यम से ब्राउज़र पर खेला जाना चाहता हूं, मैं JSON- पीआरसी पूरे बाइट [] को भेजने के लिए, या मैं इसे स्ट्रीम करने के लिए एक सॉकेट खोल सकता हूं, लेकिन किसी भी मामले में मुझे नहीं पता कि ब्राउज़र में बाइट [] को कौन खेलना है?ब्राउज़र में जावास्क्रिप्ट के साथ ऑडियो बाइट सरणी (फ़ाइल नहीं!) कैसे खेलें
उत्तर
मुझे लगता है आप के साथ इस लक्ष्य को हासिल कर सकते हैं एचटीएमएल 5 ऑडियो API आसानी से पर्याप्त:
https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension
इस पुस्तकालय काम में भी आ सकता है, हालांकि मुझे यकीन है कि नहीं कर रहा हूँ अगर यह नवीनतम ब्राउज़र व्यवहार को दर्शाता है:
निम्नलिखित कोड साइन लहर 0.5 और 2.0 पर चलाएगा। अपने बटन या कहीं भी चाहें फंक्शन play_buffersource()
पर कॉल करें।
वेब ऑडियो ध्वज सक्षम के साथ क्रोम का उपयोग करके परीक्षण किया गया। आपके मामले के लिए, आपको बस इतना करना है कि आप अपने ऑडियो बाइट्स को buf
पर घुमाएं।
<script type="text/javascript">
const kSampleRate = 44100; // Other sample rates might not work depending on the your browser's AudioContext
const kNumSamples = 16834;
const kAmplitute = 440;
const kPI_2 = Math.PI * 2;
function play_buffersource() {
if (!window.AudioContext) {
if (!window.webkitAudioContext) {
alert("Your browser sucks because it does NOT support any AudioContext!");
return;
}
window.AudioContext = window.webkitAudioContext;
}
var ctx = new AudioContext();
var buffer = ctx.createBuffer(1, kNumSamples, kSampleRate);
var buf = buffer.getChannelData(0);
for (i = 0; i < kNumSamples; ++i) {
buf[i] = Math.sin(kAmplitute * kPI_2 * i/kSampleRate);
}
var node = ctx.createBufferSource(0);
node.buffer = buffer;
node.connect(ctx.destination);
node.noteOn(ctx.currentTime + 0.5);
node = ctx.createBufferSource(0);
node.buffer = buffer;
node.connect(ctx.destination);
node.noteOn(ctx.currentTime + 2.0);
}
</script>
संदर्भ:
- http://epx.com.br/artigos/audioapi.php
- https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
आप ऑडियो resample करने की जरूरत है, तो आप एक जावास्क्रिप्ट रीसैंपलर उपयोग कर सकते हैं: https://github.com/grantgalitz/XAudioJS
आप के लिए की जरूरत है बेस 64 डेटा डीकोड करें, बहुत कुछ है जावास्क्रिप्ट बेस 64 डीकोडर का: https://github.com/carlo/jquery-base64
यह फ़ायरफ़ॉक्स पर काम नहीं करता है! क्या यह काम करने का कोई तरीका नहीं है? – mkazma
यदि आपके पास सर्वर पर बाइट्स हैं तो मैं सुझाव दूंगा कि आप सर्वर पर किसी प्रकार का हैंडलर बनाएं जो बाइट्स को एक वैव फ़ाइल के रूप में प्रतिक्रिया में स्ट्रीम करेगा। यह "फ़ाइल" केवल सर्वर पर स्मृति में होगी, डिस्क पर नहीं। फिर ब्राउज़र इसे सामान्य WAV फ़ाइल की तरह संभाल सकता है। सर्वर स्टैक पर अधिक जानकारी आपके पर्यावरण में यह कैसे किया जा सकता है, इस बारे में अधिक जानकारी देने के लिए आवश्यक होगी।
मैंने इसे निम्नलिखित कोड के माध्यम से पूरा किया। मैं एक बाइट सरणी में जाता हूं जिसमें WAV फ़ाइल से डेटा को फ़ंक्शन प्लेबेटएरे में शामिल किया जाता है। मेरा समाधान पीटर ली के समान है, लेकिन मैं उसे अपने मामले में काम नहीं कर सका (आउटपुट खराब हो गया था) जबकि यह समाधान मेरे लिए अच्छा काम करता है। मैंने सत्यापित किया कि यह फ़ायरफ़ॉक्स और क्रोम में काम करता है।
window.onload = init;
var context; // Audio context
var buf; // Audio buffer
function init() {
if (!window.AudioContext) {
if (!window.webkitAudioContext) {
alert("Your browser does not support any AudioContext and cannot play back this audio.");
return;
}
window.AudioContext = window.webkitAudioContext;
}
context = new AudioContext();
}
function playByteArray(byteArray) {
var arrayBuffer = new ArrayBuffer(byteArray.length);
var bufferView = new Uint8Array(arrayBuffer);
for (i = 0; i < byteArray.length; i++) {
bufferView[i] = byteArray[i];
}
context.decodeAudioData(arrayBuffer, function(buffer) {
buf = buffer;
play();
});
}
// Play the loaded file
function play() {
// Create a source node from the buffer
var source = context.createBufferSource();
source.buffer = buf;
// Connect to the final output node (the speakers)
source.connect(context.destination);
// Play immediately
source.start(0);
}
बफर व्यू क्या करना है? – patrickdamery
@patrickdamery यह बफर पर एक रचना है जिसका उपयोग अपनी सामग्री को म्यूट करने के लिए किया जाता है (यही कारण है कि पुनरावृत्ति समाप्त होने के बाद आप इसका कोई और उपयोग नहीं देखते हैं) –
- 1. libsyn आरएसएस फ़ीड से ऑडियो पॉडकास्ट फ़ाइल कैसे खेलें? (drupal)
- 2. सी # बाइट सरणी में फ़ाइल
- 3. कॉल शुरू होने पर ऑडियो फ़ाइल कैसे खेलें?
- 4. जावा में 3 जीपी फ़ाइल कैसे खेलें?
- 5. एचटीएमएल 5 ऑडियो एपीआई के साथ ऑडियो बाइट सरणी प्राप्त करें?
- 6. ऑडियो बाइट सहेजना [] को एक WAV फ़ाइल
- 7. अस्थायी फ़ाइल के बिना जावा में WAV बाइट सरणी में कनवर्ट ऑडियो स्ट्रीम
- 8. जावास्क्रिप्ट फ़ाइल बाइट []
- 9. पृष्ठों के माध्यम से नेविगेट करते समय ऑडियो कैसे खेलें?
- 10. वाव ऑडियो प्रारूप बाइट सरणी को फ़्लोटिंग पॉइंट
- 11. एंड्रॉइड में बाइट्स की ऑडियो स्ट्रीम कैसे खेलें?
- 12. कैसे बाइट सरणी
- 13. बाइट सरणी
- 14. सी ++ में एमपी 3 फ़ाइल कैसे खेलें?
- 15. बाइट सरणी
- 16. बाइट सरणी
- 17. वेबसाइटों पर अधिसूचना ध्वनि कैसे खेलें?
- 18. ब्राउज़र में जावास्क्रिप्ट के साथ लिंक हटाएं
- 19. मैं बाइट सरणी को ज़िप फ़ाइल
- 20. मीडियाप्लेयर में बाइट सरणी चलाएं - एंड्रॉइड
- 21. जावा में: बाइट [] सरणी से फ़ाइल कैसे ज़िप करें?
- 22. बाइट सरणी को छवि फ़ाइल में कैसे परिवर्तित करें?
- 23. बाइट सरणी से एक फ़ाइल बनाना
- 24. बाइट सरणी
- 25. ब्राउज़र पर रिकॉर्डिंग ऑडियो
- 26. एंड्रॉइड के साथ फोन कॉल पर ध्वनि कैसे खेलें?
- 27. बाइट सरणी
- 28. बाइट सरणी
- 29. बाइट [] सरणी
- 30. जावा - डाउनस्लैप्लिंग WAV ऑडियो फ़ाइल
धन्यवाद! लेकिन ऐसा लगता है कि एक फ्लोटिंग नमूना का उपयोग करना है, मेरा वाव ऑडियो कच्चा डेटा मोनो 16 के हर्ट्ज और बेस 64 बाइट्स है, क्या मुझे इसे बदलने की ज़रूरत है? कैसे? –
पहला लिंक कहता है कि यह फ़ंक्शन अब बहिष्कृत है, और प्रतिस्थापन https://developer.mozilla.org/en-US/docs/Web_Audio_API#Browser_compatibility इंटरनेट एक्सप्लोरर द्वारा समर्थित नहीं है! क्या कोई समाधान है जो सभी ब्राउज़रों के लिए काम करता है? –
@Pi बिल्कुल नहीं। यह अब एक मानक है। आईई मानक क्यों लागू करेगा? मूर्ख मत बनो! – Rushyo