2016-11-28 1 views
0

J'essaie de créer une table contenant des fichiers audio, qui devrait commencer à jouer lorsque l'utilisateur clique sur le bouton de lecture. Voilà ce que je l'ai essayé jusqu'à présent:ASP NET MVC et HTML5 audio - fichier ne pas jouer

Controller:

[HttpGet] 
    public ActionResult PlayFile(string FilePath) 
    { 
     WebClient WC = new WebClient(); 
     WC.Credentials = new System.Net.NetworkCredential("username", "password"); 
     byte[] buff = WC.DownloadData(FilePath); 
     var SplitFileName = FilePath.Split('\\'); 
     string FileName = "Recording_" + SplitFileName[SplitFileName.Count() - 1]; 

     Response.AddHeader("Content-Disposition", "inline; filename=" + FileName); 
     MemoryStream stream = new MemoryStream(buff); 
     return new FileStreamResult(stream, "audio/wav"); 

     //I have also tried: 
     //return File(buff, "audio/wav"); 
    } 

Les balises audio ressemblent à ceci:

<td> 
    <audio controls preload='none'> 
    <source src='/Components/PlayFile?FilePath=[filename.wav]' type='audio/wav'> 
    </audio> 
</td> 

Lors de l'exécution du site localement dans Chrome, tous les fichiers ont la longueur 0:00, et vous pouvez cliquer sur le bouton de lecture une fois mais le fichier n'est pas lu. Après avoir cliqué sur le bouton de lecture, il n'est plus possible de cliquer à nouveau dessus. Il est cependant possible de télécharger le fichier et de le lire. Lorsque vous exécutez le site localement dans Firefox, les fichiers ont également la longueur 0:00, et lorsque vous cliquez sur le bouton de lecture, le contrôle disparaît. Il est également possible de télécharger le fichier dans Firefox. Est-ce que quelqu'un sait ce qui pourrait causer cela?

+0

Essayez d'ouvrir la page audio dans un autre navigateur (Firefox, etc.). Si le problème persiste, vous voulez probablement vérifier la valeur du paramètre d'entrée 'FilePath' et vous assurer qu'il contient le bon chemin vers le fichier audio demandé ou un ou plusieurs paramètres incorrects du navigateur. –

+0

Le même problème est là dans Firefox, j'ai ajouté cette information à ma question. Je ne pense pas que le paramètre FilePath est faux, car il est possible de télécharger le fichier. Comment puis-je vérifier si les paramètres du navigateur sont incorrects? –

Répondre

0

Le problème était que les fichiers audio étaient au format GSM et devaient être convertis en PCM. Ce code fonctionne:

[HttpGet] 
public ActionResult PlayFile(string FilePath) 
{ 
    WebClient WC = new WebClient(); 
    WC.Credentials = new System.Net.NetworkCredential("username", "password"); 
    byte[] buff = WC.DownloadData(FilePath); 
    var SplitFileName = FilePath.Split('\\'); 
    string FileName = "Recording_" + SplitFileName[SplitFileName.Count() - 1]; 

    MemoryStream ms = new MemoryStream(); 
    ms.Write(buff, 0, buff.Length); 
    ms.Seek(0, SeekOrigin.Begin); 

    MemoryStream outputStream = new MemoryStream(); 

    using (NAudio.Wave.WaveFileReader reader = new WaveFileReader(ms)) 
    using (NAudio.Wave.WaveStream waveStream = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(reader)) 
    using (NAudio.Wave.WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, waveStream.WaveFormat)) 
    { 
      byte[] bytes = new byte[waveStream.Length]; 
      waveStream.Position = 0; 
      waveStream.Read(bytes, 0, (int)waveStream.Length); 
      waveFileWriter.Write(bytes, 0, bytes.Length); 
      waveFileWriter.Flush(); 
    } 

    return File(outputStream.ToArray(), "audio/wav"); 
} 
0

Pouvez-vous essayer avec ci-dessous comme son travail pour moi.

public FileResult PlayFile(string FilePath) 
{ 
    return new FilePathResult(FilePath, "audio/wav"); 
} 

De même, essayez de remplacer "audio/wav" par "audio/mp3", si cela vous aide.