Html5 phát đồng thời nhiều tệp âm thanh

Tôi đang cố gắng phát 3 tệp âm thanh (có khả năng sẽ có nhiều hơn sau này) chạy trong nền. Tại thời điểm này, tôi chỉ đơn giản là cố gắng phát chúng tuần tự và để nó lặp lại tệp âm thanh đầu tiên khi tệp cuối cùng được phát. Tôi tin rằng tôi đã thử hầu hết mọi giải pháp hoặc sự kết hợp các chức năng và tôi không thể làm cho nó hoạt động được. Tôi gặp phải một trong hai vấn đề

  1. Nếu tôi thử sử dụng tính năng lặp lại với từng âm thanh được lưu trữ trong mảng, thì trang sẽ phát thành công âm thanh đầu tiên, sau đó cố gắng phát hai âm thanh tiếp theo đồng thời, thay vì phát tuần tự. Và nó chắc chắn không quay trở lại đầu tiên. Hơn nữa, nếu bạn để ý trong html của tôi, tôi có một ID riêng cho mỗi người chơi. Sẽ tốt hơn nếu đặt tất cả chúng vào ID người chơi mẫu?

    jQuery(document).ready(function (){
    
    var audioArray = document.getElementsByClassName('playsong');
    
    var i = 0;
    var nowPlaying = audioArray[i];
    nowPlaying.load();
    nowPlaying.play();
    
    while(true){
    
        $('#player').on('ended', function(){
            if(i>=2){
                i=0;
            }
            else{
                i++;
            }
    
            nowPlaying = audioArray[i];
            nowPlaying.load();
            nowPlaying.play();
        });
    
    }
    });
    
  2. Mặt khác, tôi có thể chơi tuần tự từng lượt nhưng mỗi lượt chơi cần được mã hóa cứng và tôi không thể quay lại lượt đầu tiên

    jQuery(document).ready(function (){
    
    var audioArray = document.getElementsByClassName('playsong');
    
    var i = 0;
    var nowPlaying = audioArray[i];
    nowPlaying.load();
    nowPlaying.play();
    
    $('#player').on('ended', function(){
             // done playing
        //alert("Player stopped");
    
        nowPlaying = audioArray[1];
        nowPlaying.load();
        nowPlaying.play();
    
        $('#player2').on('ended', function(){
    
            nowPlaying = audioArray[2];
            nowPlaying.load();
            nowPlaying.play();
        });
    }); 
    });
    

Đây là html của tôi






Tôi không quen lắm với javascript, tôi tự hỏi liệu có chức năng kích hoạt sự kiện nào khác được tích hợp trong JS mà tôi không sử dụng không?

khi tôi phát audio1 thì phát audio2, mobile safari (ios) dừng audio1 rồi phát audio2. Nó chỉ xảy ra với ios safari

ghi bàn. 3

câu trả lời được chấp nhận

Theo như tôi biết, đây là quyết định thiết kế của Apple, không thể phát nhiều hơn một tệp âm thanh

Đọc thêm

ghi bàn. 0

Một cách giải quyết khả thi là sử dụng tiện ích phía máy chủ như sox để trộn nhiều tệp âm thanh thành một. Nó không tương đương với việc phát nhiều tệp âm thanh ở vị trí ngẫu nhiên nhưng tùy thuộc vào nhu cầu của bạn, nó có thể là một giải pháp

ghi bàn. 1

Tôi đã làm một số thử nghiệm về điều này gần đây. Câu trả lời ngắn gọn như đã nêu trước đây, nó không hoạt động. Tôi đã thử làm việc với mp3, m4a (aac tôi đã mua trên itunes), mp4 và aif, vì vậy định dạng tệp không ảnh hưởng đến khả năng phát nhiều luồng cùng một lúc của iOS safari

Tôi hiện đã "giải quyết" sự cố trong ứng dụng web của mình bằng cách chỉ định mức độ ưu tiên cho âm thanh trong ứng dụng để ứng dụng có thể ngắt hoặc bỏ qua yêu cầu phát tệp âm thanh một cách thông minh. Có lẽ bạn có thể thử một cái gì đó tương tự

cách phát nhiều tệp âm thanh cùng lúc với AVAudioPlayer?

ghi bàn. 10

câu trả lời được chấp nhận

Các tệp có định dạng bên dưới có thể được phát đồng thời trên iPhone

Âm thanh AAC, MP3 và ALAC (Apple Lossless). có mối quan tâm về tài nguyên CPU. PCM tuyến tính và IMA/ADPCM (âm thanh IMA4). không lo ngại về tài nguyên CPU

Bạn chỉ cần tạo một phiên bản trình phát mới cho mọi tệp nhạc mà bạn muốn phát

Đoạn mã mẫu

-(void)playSounds{
    [self playSound1];
    [self playSound2];
}

-(void)playSound1{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"file1" 
                                                      ofType:@"m4a"];  
    AVAudioPlayer* player= [[AVAudioPlayer alloc] initWithContentsOfURL:
                                                 [NSURL fileURLWithPath:path]
                                                                  error:NULL];  
    player.delegate = self;  
    [player play];
}

-(void)playSound2{
     SString *path = [[NSBundle mainBundle] pathForResource:@"file2" 
                                                      ofType:@"m4a"];  
    AVAudioPlayer* player= [[AVAudioPlayer alloc] initWithContentsOfURL:
                                                 [NSURL fileURLWithPath:path]
                                                                  error:NULL];  
    player.delegate = self;  
    [player play];
}

Chuyển đổi sang định dạng được hỗ trợ (i. e. mp3 sang quán cà phê)

/usr/bin/afconvert -f caff -d âm thanh ima4. âm thanh mp3. quán cà phê

hướng dẫn chi tiết

https. //tẩy não. báo chí. com/2009/08/14/iphone-chơi-2-âm-thanh-cùng-một/

ghi bàn. 2

Giải pháp Swift 2+

-> Bây giờ bạn có thể phát nhiều âm thanh cùng lúc với hậu tố mp3 hoặc m4a. Tuy nhiên, nếu bạn muốn chuyển đổi mp3 sang m4a, bạn có thể tải xuống chương trình miễn phí này từ trang web chính thức. http. // audacityteam. org/tải xuống/mac/

Ngoài ra, bạn có thể cần FFmpeg 2+ để chuyển đổi quy trình.

-> Tôi thích sử dụng m4a hơn vì tóm lại, đó là định dạng âm thanh của riêng Apple

//import AVFoundation

  // you have to define them first
  var player1 = AVAudioPlayer()
  var player2 = AVAudioPlayer()

  func playMultipleSound() {
    playSound1()
    playSound2()
  }

  func playSound1() {
    let soundUrl = NSBundle.mainBundle().URLForResource("sound1", withExtension: "mp3")! // or m4a

    do {
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
      try AVAudioSession.sharedInstance().setActive(true)

      player1 = try AVAudioPlayer(contentsOfURL: soundUrl)
      player1.numberOfLoops = 0
      player1.prepareToPlay()
      player1.play()
    } catch _ {
      return print("sound file not found")
    }
  }

  func playSound2() {
    let soundUrl = NSBundle.mainBundle().URLForResource("sound2", withExtension: "m4a")! // or mp3

    do {
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
      try AVAudioSession.sharedInstance().setActive(true)

      player2 = try AVAudioPlayer(contentsOfURL: soundUrl)
      player2.numberOfLoops = 0
      player2.prepareToPlay()
      player2.play()
    } catch _ {
      return print("sound file not found")
    }
  }

Phần mở rộng tên tệp chính thức duy nhất cho các tệp MPEG-4 Phần 14 là. mp4, nhưng nhiều cái có phần mở rộng khác, phổ biến nhất là. m4a và. m4p. M4A (chỉ âm thanh) thường được nén bằng mã hóa AAC (mất dữ liệu), nhưng cũng có thể ở định dạng Apple Lossless

Có thể phát nhiều nguồn âm thanh trong HTML không?

Phần tử HTML Nó có thể chứa một hoặc nhiều nguồn âm thanh , được biểu diễn bằng thuộc tính src hoặc phần tử

Làm cách nào tôi có thể phát hai bản âm thanh cùng lúc trực tuyến?

Cách nối âm thanh. .
Tải lên tệp âm thanh của bạn. Tải âm thanh của bạn lên VEED;
hợp nhất. Để nối các tệp âm thanh hoặc clip âm thanh, hãy tải hai tệp trở lên lên. Bạn có thể chia nhỏ và sắp xếp lại các clip của mình trên Dòng thời gian
Tiết kiệm. Nhấp vào Xuất và lưu tệp âm thanh mới của bạn trên thiết bị của bạn