avaudioplayer إعادة تعيين الصوت حاليا ولعبها من البداية

StackOverflow https://stackoverflow.com/questions/1161148

سؤال

أواجه مشكلة في استخدام Avaudioplayer حيث أرغب في إعادة تعيين مشغل إذا كان يعمل حاليا ولديه تشغيله مرة أخرى.

أحاول ما يلي بدون حظ:

يلعب الصوت مرة واحدة ولكن بعد ذلك في المرة الثانية، حدد الزر إنه توقف عن الصوت، المرة الثالثة يبدأ الصوت مرة أخرى.

//Stop the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    [player stop];
    [player play];
} else {
    NSLog(@"playSound: %@", selectedSound);
    [player play];      
}

لقد حاولت أيضا استخدام Player.CurrentTime = 0 والذي يشير إلى أنه من شأنه إعادة تعيين المشغل، التي لم تنجح، حاولت أيضا إعادة ضبط Currenttime = 0 ثم استدعاء اللعب الذي لم يعمل.

//Stop the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    player.currentTime = 0;
    [player play];
} else {
    NSLog(@"playSound: %@", selectedSound);
    [player play];      
}
هل كانت مفيدة؟

المحلول

لموقفك سأحاول ما يلي

//Pause the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    [player pause];
}

player.currentTime = 0;
[player play];

إذا كنت ستلعب الصوت مرة أخرى على الفور، فسوف أقترح توقف مؤقتا بدلا من التوقف. توقف توقف الاتصال "توقف التشغيل وتراجع عن الإعداد المطلوب للتشغيل."

نصائح أخرى

مثال سويفت:

player.currentTime = 0.0;

كما هو موضح، إذا كنت تريد تشغيل الصوت مرة أخرى، فيجب عليك تجنب تعطيل مثيل AvaudioPlayer بالتوقف، بل يصدر مجرد إعادة تعيين الموضع الذي يتم فيه تشغيله. لذلك، لا تستخدم إيقاف () أو إيقاف مؤقت () ولكن كعافل مذكورة، مجرد إصدار .CurrentTime = 0. لذلك في حالتك، ستفعل ببساطة:

if (player.isPlaying) { 
   player.currentTime = 0
} else {
   player.play()
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top