JavaScript பயன்பாடுகளில் ஆடியோ காலத்தைக் கண்டறிதல்
ஜாவாஸ்கிரிப்ட் மூலம் ஆடியோ கோப்புகளை டைனமிக் முறையில் செயலாக்குவது சற்று தந்திரமானதாக இருக்கும், குறிப்பாக WebM போன்ற மூல தரவு வடிவங்களுடன் பணிபுரியும் போது. ஒரு பொதுவான பயன்பாட்டு வழக்கு மீட்டெடுப்பது கால அளவு ஒரு மூல ஆடியோ கோப்பின், ஆனால் டெவலப்பர்கள் பெரும்பாலும் சிக்கல்களை எதிர்கொள்கின்றனர் "ஏற்றப்பட்ட மெட்டாடேட்டா" நிகழ்வு தூண்டுவதில் தோல்வி. இது கோப்பின் காலம் உட்பட மெட்டாடேட்டாவை சரியாக பிரித்தெடுக்கும் செயல்முறையை சீர்குலைக்கும்.
ஜாவாஸ்கிரிப்ட்டில், ஆடியோ கோப்புகளை ஏற்றுவதற்கான பொதுவான அணுகுமுறை ஒரு உருவாக்கத்தை உள்ளடக்கியது ஆடியோ உறுப்பு மற்றும் ப்ளாப் URL மூலம் மூல ஆடியோ மூலத்தை ஒதுக்குகிறது. இருப்பினும், ஓபஸ் போன்ற குறிப்பிட்ட கோடெக்குகள் கொண்ட WebM கோப்புகள், சில நேரங்களில் ஏற்றுதல் கட்டத்தில் எதிர்பாராத விதமாக செயல்படும், இது ஏற்றப்பட்ட மெட்டாடேட்டா நிகழ்வை சரியாக சுடுவதைத் தடுக்கிறது. இதன் விளைவாக, எதிர்பார்த்தது ஒலி.காலம் மதிப்பு அணுக முடியாததாக உள்ளது.
இந்த கட்டுரை எவ்வாறு துல்லியமாக பெறுவது என்பதை ஆராய்கிறது மூல ஆடியோ கோப்பின் காலம் ஜாவாஸ்கிரிப்ட் பயன்படுத்தி. நீங்கள் வழங்கிய குறியீட்டைக் கொண்டு எழக்கூடிய சவால்களை நாங்கள் கடந்து அவற்றைச் சமாளிப்பதற்கான பரிந்துரைகளை வழங்குவோம். இன் நுணுக்கங்களைப் புரிந்துகொள்வதன் மூலம் ஆடியோ API மற்றும் மெட்டாடேட்டா கையாளுதல், இந்த செயல்பாட்டை உங்கள் திட்டப்பணியில் மிகவும் சீராக ஒருங்கிணைக்க முடியும்.
நீங்கள் ஒரு வெப் பிளேயரை உருவாக்கினாலும் அல்லது ஆடியோ தரவை நிகழ்நேரத்தில் பகுப்பாய்வு செய்தாலும், இந்தச் சிக்கல்களை எவ்வாறு கையாள்வது என்பதை அறிவது அவசியம். சாத்தியமான திருத்தங்கள் மற்றும் தீர்வுகளை நாங்கள் ஆராய்வோம், உங்கள் குறியீடு எதிர்பார்த்தபடி நிகழ்வுகளைத் தூண்டுவதையும் சரியான காலத் தகவலை வழங்குவதையும் உறுதி செய்வோம்.
கட்டளை | பயன்பாட்டின் உதாரணம் |
---|---|
atob() | அடிப்படை64-குறியீடு செய்யப்பட்ட சரத்தை பைனரி சரமாக மாற்றுகிறது. அடிப்படை64 சரமாக வழங்கப்பட்ட மூல WebM ஆடியோ தரவை டிகோட் செய்வதற்கு இந்த செயல்பாடு அவசியம். |
Uint8Array() | 8-பிட் கையொப்பமிடாத முழு எண்களை வைத்திருக்க தட்டச்சு செய்யப்பட்ட வரிசையை உருவாக்குகிறது. மேலும் செயலாக்கத்திற்காக ஆடியோ கோப்பின் டிகோட் செய்யப்பட்ட பைனரி தரவை சேமிக்க இது பயன்படுகிறது. |
new Blob() | உருவாக்குகிறது a குமிழ் ஆடியோ தரவிலிருந்து பொருள். இது மூல பைனரி தரவை JavaScript இல் கோப்பு போன்ற பொருளாகக் கையாள அனுமதிக்கிறது. |
URL.createObjectURL() | ஒரு தற்காலிக URL ஐ உருவாக்குகிறது குமிழ் ஆடியோ டேக் போன்ற HTML உறுப்புக்கு ஒதுக்கப்படலாம். |
loadedmetadata event | மீடியா கோப்பின் மெட்டாடேட்டா (காலம் போன்றவை) கிடைக்கும் போது தூண்டுகிறது. இது ஆடியோ காலத்தை நம்பகத்தன்மையுடன் அணுகுவதை உறுதி செய்கிறது. |
FileReader | கோப்புகளை உரை, பைனரி அல்லது தரவு URLகளாகப் படிக்கும் உலாவி API. இது மூல ஆடியோ கோப்புகளை ஆடியோ கூறுகளால் படிக்கக்கூடிய வடிவங்களாக மாற்ற அனுமதிக்கிறது. |
ffmpeg.ffprobe() | பின்தளத்தில் மீடியா கோப்புகளை பகுப்பாய்வு செய்கிறது மற்றும் கால அளவு போன்ற மெட்டாடேட்டாவைப் பிரித்தெடுக்கிறது. இது ஒரு பகுதியாகும் ffmpeg Node.js இல் பயன்படுத்தப்படும் நூலகம். |
Promise | மெட்டாடேட்டா சரியாகத் தீர்க்கப்படுகிறதா அல்லது பிழைகள் பிடிபடுகிறதா என்பதை உறுதிசெய்ய Node.js இல் ffprobe() போன்ற ஒத்திசைவற்ற செயல்பாடுகளை மூடுகிறது. |
new Audio() | ஒரு உருவாக்குகிறது HTML5 ஆடியோ உறுப்பு நிரல் ரீதியாக, ப்ளாப் URLகள் அல்லது தரவு URL களில் இருந்து ஆடியோ கோப்புகளை டைனமிக் ஏற்றுவதை அனுமதிக்கிறது. |
ஜாவாஸ்கிரிப்ட் மூலம் ரா வெப்எம் கோப்புகளிலிருந்து ஆடியோ கால அளவை பகுப்பாய்வு செய்தல் மற்றும் மீட்டெடுத்தல்
முதல் தீர்வில், நாங்கள் பயன்படுத்துகிறோம் HTML5 ஆடியோ உறுப்பு ஒரு ப்ளாப்பில் இருந்து ஆடியோ தரவை மாறும் வகையில் ஏற்றுவதற்கு. ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி பேஸ்64-குறியீடு செய்யப்பட்ட ஆடியோ சரத்தை பைனரி டேட்டாவாக மாற்றுவதன் மூலம் செயல்முறை தொடங்குகிறது. atob() முறை. இந்த டிகோட் செய்யப்பட்ட பைனரி தரவு 8-பிட் கையொப்பமிடப்படாத முழு எண்களின் தட்டச்சு செய்யப்பட்ட வரிசையில் சேமிக்கப்படுகிறது Uint8Array() கட்டமைப்பாளர். வரிசை பின்னர் ஒரு குமிழியாக மாற்றப்படுகிறது, இது ஒரு மெய்நிகர் கோப்பாக செயல்படும். இந்த ப்ளாப், ப்ளாப் URL வழியாக ஆடியோ உறுப்புக்கு அனுப்பப்பட்டு, ஆடியோ தரவை உலாவியில் பயன்படுத்த முடியும்.
அடுத்த கட்டமாக பிணைக்க வேண்டும் ஏற்றப்பட்ட மெட்டாடேட்டா ஆடியோ உறுப்புக்கான நிகழ்வு. உலாவியானது ஆடியோ கோப்பின் மெட்டாடேட்டாவை முழுமையாக ஏற்றியவுடன் இந்த நிகழ்வு தூண்டுகிறது, இது நம்மைப் பாதுகாப்பாக அணுக அனுமதிக்கிறது. கால அளவு சொத்து. இருப்பினும், ஆடியோ வடிவம் அல்லது கோடெக் (இதில், ஓபஸுடன் கூடிய வெப்எம்) உலாவியால் சரியாக அங்கீகரிக்கப்படவில்லை என்றால் சிக்கல்கள் ஏற்படலாம், இதுவே மெட்டாடேட்டா நிகழ்வின் அசல் செயலாக்கத்தில் தோல்வியடைந்ததற்குக் காரணமாக இருக்கலாம். மெட்டாடேட்டா வெற்றிகரமாக ஏற்றப்பட்டால், அது கன்சோலில் காலத்தை பதிவு செய்யும் என்பதை குறியீடு உறுதி செய்கிறது.
இரண்டாவது அணுகுமுறையில், நாங்கள் பயன்படுத்துகிறோம் FileReader API மூல ஆடியோ தரவை மிகவும் நம்பகத்தன்மையுடன் கையாள. FileReader ஆடியோ ப்ளாப்பைப் படித்து அதை டேட்டா URL ஆக மாற்றுகிறது, இது ஆடியோ உறுப்புக்கு நேரடியாக ஒதுக்கப்படும். இந்த முறை முதல் எடுத்துக்காட்டில் காணப்பட்ட சில கோடெக் இணக்கத்தன்மை சிக்கல்களைத் தடுக்கலாம். அதே ஏற்றப்பட்ட மெட்டாடேட்டா ஆடியோவின் கால அளவைப் பிடிக்கவும் உள்நுழையவும் நிகழ்வு பயன்படுத்தப்படுகிறது. இந்த அணுகுமுறை ப்ளாப் அல்லது ஃபைல் ஆப்ஜெக்ட்களாகப் பதிவேற்றப்படும் ஆடியோ கோப்புகள் சரியாகக் கையாளப்படுவதை உறுதிசெய்கிறது, இது பல்வேறு உலாவி சூழல்களில் மிகவும் நிலையான முடிவுகளை வழங்குகிறது.
சர்வர் பக்க காட்சிகளுக்கு, Node.js ஐப் பயன்படுத்தி பின்தளத்தில் தீர்வைச் செயல்படுத்தினோம் ffmpeg நூலகம். தி ffprobe ffmpeg இலிருந்து செயல்பாடு ஆடியோ கோப்பை பகுப்பாய்வு செய்கிறது மற்றும் கால அளவு உட்பட மெட்டாடேட்டாவை ஒத்திசைவற்ற முறையில் பிரித்தெடுக்கிறது. இந்த செயலை ஒரு வாக்குறுதியில் மூடுவது, குறியீடு வெற்றி மற்றும் பிழை நிலைகளை அழகாக கையாளுவதை உறுதி செய்கிறது. கோப்பு பதிவேற்ற அமைப்புகள் அல்லது மீடியா மாற்றிகள் போன்ற சர்வரில் ஆடியோ செயலாக்கம் நடக்க வேண்டிய சூழ்நிலைகளுக்கு இந்த அணுகுமுறை மிகவும் பயனுள்ளதாக இருக்கும். இந்த முறையின் மூலம், அதிக நம்பகத்தன்மை மற்றும் நெகிழ்வுத்தன்மையை உறுதிசெய்து, வாடிக்கையாளர் பக்க சூழலை நம்பாமல் ஆடியோ கால அளவை மீட்டெடுக்கலாம்.
ஜாவாஸ்கிரிப்ட் மூலம் WebM ஆடியோ கால அளவைக் கையாளுதல்: ஒரு ஆழமான தீர்வு
HTML5 ஐப் பயன்படுத்தி ஜாவாஸ்கிரிப்ட் முன்-இறுதி அணுகுமுறை ஆடியோ குமிழ் கையாளுதலுடன் கூடிய உறுப்பு
// Create an audio element and load raw audio data to get the duration
const rawAudio = 'data:audio/webm;codecs=opus;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2...';
// Convert the base64 string into a Blob
const byteCharacters = atob(rawAudio.split(',')[1]);
const byteNumbers = new Uint8Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const blob = new Blob([byteNumbers], { type: 'audio/webm' });
// Create an audio element and load the Blob URL
const audio = new Audio();
audio.src = URL.createObjectURL(blob);
audio.addEventListener('loadedmetadata', () => {
console.log('Audio duration:', audio.duration);
});
FileReader ஐப் பயன்படுத்தி WebM ஆடியோவிலிருந்து கால அளவைப் பெறுதல்
சிறந்த கோப்பு கையாளுதலுக்காக FileReader API உடன் JavaScript ஐப் பயன்படுத்துதல்
// Function to handle raw audio duration retrieval via FileReader
const getAudioDuration = (file) => {
const reader = new FileReader();
reader.onload = (e) => {
const audio = new Audio();
audio.src = e.target.result;
audio.addEventListener('loadedmetadata', () => {
console.log('Duration:', audio.duration);
});
};
reader.readAsDataURL(file);
};
// Usage: Call with a Blob or File object
// getAudioDuration(blob);
Node.js ஆடியோ கால பிரித்தெடுப்புக்கான பின்தள தீர்வு
Node.js ஐப் பயன்படுத்துதல் மற்றும் ffmpeg சர்வர் பக்க ஆடியோ பகுப்பாய்விற்கான நூலகம்
// Install ffmpeg library: npm install fluent-ffmpeg
const ffmpeg = require('fluent-ffmpeg');
const fs = require('fs');
// Function to get audio duration on the backend
const getAudioDuration = (filePath) => {
return new Promise((resolve, reject) => {
ffmpeg.ffprobe(filePath, (err, metadata) => {
if (err) return reject(err);
resolve(metadata.format.duration);
});
});
};
// Usage: Call with the path to the WebM audio file
getAudioDuration('path/to/audio.webm').then(duration => {
console.log('Audio duration:', duration);
}).catch(console.error);
ஜாவாஸ்கிரிப்ட் மூலம் ஆடியோ மெட்டாடேட்டாவைக் கையாளும் மேம்பட்ட நுட்பங்கள்
உடன் பணிபுரியும் போது ஒரு முக்கியமான கருத்து ஆடியோ மெட்டாடேட்டா உலாவி இணக்கத்தன்மை ஆகும். எல்லா உலாவிகளும் ஒவ்வொரு ஆடியோ கோடெக் அல்லது வடிவமைப்பையும் சமமாக ஆதரிக்காது, இது ஓபஸ் குறியாக்கத்துடன் கூடிய WebM போன்ற வடிவங்களில் இருந்து மெட்டாடேட்டாவை அணுக முயற்சிக்கும் போது சிக்கல்களுக்கு வழிவகுக்கும். நவீன உலாவிகள் பொதுவாக இந்த வடிவங்களை நன்றாகக் கையாளுகின்றன, ஆனால் a ஐப் பயன்படுத்துவதில் விளிம்பு நிலைகள் உள்ளன பின்னடைவு சீரான நடத்தையை உறுதிப்படுத்த சர்வர் பக்க செயலாக்கம் போன்ற முறை தேவைப்படுகிறது. எதிர்பாராத தோல்விகளைத் தவிர்க்க ஆடியோ வடிவ ஆதரவை முன்கூட்டியே சோதிப்பது ஒரு நல்ல நடைமுறையாகும்.
மற்றொரு பயனுள்ள உத்தி என்பது ஆடியோ மெட்டாடேட்டாவைப் பயன்படுத்தி முன்கூட்டியே ஏற்றுவது preload HTML இல் உள்ள பண்பு audio குறிச்சொல். என அமைப்பதன் மூலம் "metadata", முழு ஆடியோ கோப்பையும் பதிவிறக்கம் செய்யாமல் தேவையான மெட்டாடேட்டாவை மட்டும் ஏற்றுமாறு உலாவியிடம் கூறலாம். இது செயல்திறனை மேம்படுத்தலாம், குறிப்பாக பெரிய கோப்புகளுடன் பணிபுரியும் போது, மேலும் உறுதி செய்கிறது loadedmetadata நிகழ்வு நம்பகத்தன்மையுடன் எரிகிறது. இருப்பினும், இந்த அணுகுமுறையுடன் கூட, நெட்வொர்க் தாமதங்கள் அல்லது குறுக்கு மூலக் கட்டுப்பாடுகள் சிக்கல்களை ஏற்படுத்தக்கூடும், பிழை கையாளும் வழிமுறைகளை செயல்படுத்துவதன் மூலம் டெவலப்பர்கள் கணக்கில் எடுத்துக்கொள்ள வேண்டும்.
இறுதியாக, பெரிய அளவிலான ஆடியோ பயன்பாடுகளுடன் பணிபுரிவது அடிக்கடி தேவைப்படுகிறது ஒத்திசைவற்ற நிரலாக்கம் நுட்பங்கள். நிகழ்வு கேட்பவர்களுடன் JavaScript இன் ஒத்திசைவு/காத்திருப்பு தொடரியலைப் பயன்படுத்துவது, ஆடியோ தரவு ஏற்றப்படும் வரை காத்திருக்கும்போது, பயன்பாடு பதிலளிக்கக்கூடியதாக இருப்பதை உறுதி செய்கிறது. இதேபோல், மட்டு குறியீடு வடிவமைப்பு டெவலப்பர்களுக்கு ஆடியோ பிளேபேக், மெட்டாடேட்டா மீட்டெடுப்பு மற்றும் பிழை கையாளுதல் ஆகியவற்றை தனித்தனியாக நிர்வகிக்க உதவுகிறது, இது பல மீடியா கோப்புகளை உள்ளடக்கிய வலை பயன்பாடுகளை உருவாக்கும்போது குறிப்பாக மதிப்புமிக்கது. இந்த நடைமுறைகள் மிகவும் வலுவான மற்றும் அளவிடக்கூடிய குறியீட்டிற்கு பங்களிக்கின்றன, சிறந்த பயனர் அனுபவத்தையும் பராமரிப்பையும் உறுதி செய்கின்றன.
ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி ஆடியோ கால அளவைப் பெறுவதற்கான அத்தியாவசிய கேள்விகள்
- நான் எப்படி உறுதி செய்ய முடியும் loadedmetadata நிகழ்வு தொடர்ந்து எரிகிறதா?
- பயன்படுத்தி preload மதிப்புடன் பண்பு "metadata" தேவையான தரவை முன்னரே ஏற்றுவதற்கு உலாவிக்கு உதவலாம்.
- அடிப்படை64 ஆடியோ சரத்தை a ஆக மாற்றுவதன் நோக்கம் என்ன? Blob?
- மூல ஆடியோ தரவை ஒரு கோப்பைப் போல கையாள இது உங்களை அனுமதிக்கிறது, இது ஒரு க்கு ஒதுக்கப்படலாம் audio பிளேபேக் அல்லது மெட்டாடேட்டா பிரித்தெடுப்பதற்கான உறுப்பு.
- என்ன ஏற்படுத்தலாம் audio.duration திரும்பப் பெற வேண்டிய சொத்து NaN?
- மெட்டாடேட்டா சரியாக ஏற்றப்படாதபோது, ஆதரிக்கப்படாத வடிவங்கள் அல்லது உலாவியில் உள்ள கோடெக் சிக்கல்கள் காரணமாக இது அடிக்கடி நிகழ்கிறது.
- ஒரு கோப்பை ஏற்றுவதற்கு முன் ஆடியோ ஃபார்மட் இணக்கத்தன்மையை சரிபார்க்க வழி உள்ளதா?
- நீங்கள் பயன்படுத்தலாம் canPlayType() முறை audio கொடுக்கப்பட்ட ஆடியோ வடிவமைப்பை உலாவி ஆதரிக்கிறதா என்பதைக் கண்டறியும் உறுப்பு.
- பின்தளத்தில் ஆடியோ மெட்டாடேட்டாவை பிரித்தெடுக்க முடியுமா?
- ஆம், போன்ற கருவிகளைப் பயன்படுத்துதல் ffmpeg.ffprobe() Node.js சூழலில், சர்வர் பக்கத்தில் உள்ள கால அளவு போன்ற மெட்டாடேட்டாவை மீட்டெடுக்க உங்களை அனுமதிக்கிறது.
ஜாவாஸ்கிரிப்ட் மூலம் ஆடியோ கால அளவைப் பெறுவதற்கான முக்கிய குறிப்புகள்
ஆடியோ காலத்தை பிரித்தெடுக்கும் செயல்முறையானது உலாவி வரம்புகள், ஆடியோ வடிவங்கள் மற்றும் JavaScript மூலம் மூல ஆடியோ தரவை எவ்வாறு கையாள்வது என்பதைப் புரிந்துகொள்வதை உள்ளடக்கியது. பயன்படுத்தி குமிழ்கள், ஆடியோ கூறுகள் மற்றும் நிகழ்வுகள் போன்றவை ஏற்றப்பட்ட மெட்டாடேட்டா மெட்டாடேட்டாவை சீராக அணுகுவதை உறுதி செய்கிறது.
கூடுதலாக, சர்வர் பக்க கருவிகள் போன்றவை ffmpeg உலாவி ஆதரவு சீரற்றதாக இருக்கும்போது நம்பகமான பின்னடைவை வழங்கும். முன்-இறுதி மற்றும் பின்-இறுதி தீர்வுகளை இணைப்பதன் மூலம், வடிவமைப்பு வரம்புகள் அல்லது நெட்வொர்க் சிக்கல்களைப் பொருட்படுத்தாமல், ஆடியோ கோப்புகளின் துல்லியமான மற்றும் தடையற்ற கையாளுதலை டெவலப்பர்கள் உறுதிசெய்ய முடியும்.
ஜாவாஸ்கிரிப்ட் மூலம் ரா ஆடியோ கோப்புகளை கையாளுவதற்கான ஆதாரங்கள் மற்றும் குறிப்புகள்
- பயன்படுத்துவதை விளக்குகிறது HTML5 ஆடியோ API மற்றும் ஆடியோ காலத்தைப் பிரித்தெடுப்பதற்கான மெட்டாடேட்டா நிகழ்வுகள்: MDN Web Docs: HTMLAudioElement
- எவ்வாறு கையாள்வது என்பதை உள்ளடக்கியது குமிழ்கள் மூல பைனரி ஆடியோ தரவை நிர்வகிக்க FileReader ஐப் பயன்படுத்தவும்: MDN Web Docs: FileReader API
- உடன் பணிபுரிவதை விவரிக்கிறது ffmpeg Node.js சூழல்களில் ஆடியோ பகுப்பாய்விற்கு: ffmpeg: ffprobe ஆவணம்
- கையாளுதல் பற்றிய தகவல்களை வழங்குகிறது வெப்எம் மற்றும் உலாவி சூழல்களில் ஓபஸ் கோடெக்குகள்: வெப்எம் திட்டம்
- கிராஸ்-ஆரிஜின் ஆடியோ ஆதாரங்கள் மற்றும் உலாவி வரம்புகளைக் கையாள்வதற்கான பொதுவான நுண்ணறிவு: MDN வெப் டாக்ஸ்: CORS