none
サウンドファイルが再生できない(エラー:指定された場所にサウンド ファイルが存在することを確認してください。) RRS feed

  • 質問

  • はじめまして、web開発初心者です

     

    webページで画像(JPG)を表示して音声(WAV)を再生するアプリが作りたくて、基本部分のテストをしています

    次のようなテストプログラムを作りました

     

    <Default.aspx>

    textboxが2つ、buttonが2つ、Imageが1つ

    <Default.aspx.vb>の内容

    Imports System
    Imports System.Media


    Partial Public Class _Default
        Inherits System.Web.UI.Page

        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            Dim fName As String = "~/data/" & TextBox1.Text
            Image1.ImageUrl = fName
        End Sub

        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
            Dim wavePlayer As New SoundPlayer
            Dim fName As String = "~/data/" & TextBox2.Text
            wavePlayer.SoundLocation = fName
            wavePlayer.Play()
        End Sub
    End Class

    <データファイル>

    dataというフォルダを作ってその中にJPGとWAVファイルを格納

    (今のところローカルで実行中)

     

    <実行結果>

    textbox1にJPGファイル名を入力しbutton1を押すと、image1に指定したJPGファイルが表示される

    textbox2にWAVファイル名を入力しbutton2を押すと、次のエラーが発生する

     

    '/' アプリケーションでサーバー エラーが発生しました。

    指定された場所にサウンド ファイルが存在することを確認してください。

    説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
    例外の詳細: System.IO.FileNotFoundException: 指定された場所にサウンド ファイルが存在することを確認してください。

     

    SoundLocationを使わずplayの引数に指定したりいろいろやってみましたが変化ありません

    とても初歩的な問題だと思うのですが、これで3日以上悩んでいます

    どなたかヒントをいただけると助かります
    2008年6月5日 3:40

回答

  • SoundPlayer というのは Windows フォームコントロールですよね? そもそも、それを

    Web アプリケーションで使うという点が問題だと思うのですが。

    2008年6月5日 9:09
  • SurferOnWwwさんの言われる通りです。Webクライアントで再生するのであれば、以下のページを参考にしてみて下さい。

     

    Playing Sounds On The Web
    http://www.w3schools.com/media/media_browsersounds.asp

    2008年6月5日 10:25
    モデレータ
  • 時間がなくて先のレスは説明不足でしたので補足します。

     

    ローカル環境でなら、フルパス( ~/data/ ではなくて、ドライブから、例えば、
    C:/Documents and Settings/...../data/ というように)にすればエラーは出ず、
    wav ファイルが再生されて PC から聴こえてくると思います。

     

    #実は、聴こえるはずがないと思っていたのですが、実際に自分でローカル環境
     で試してみたら聴こえました。(汗)

     

    でも、それはサーバー/クライアント環境ではサーバーが再生していることにな
    ります(実環境で実際にサーバーが再生できるかどうかは分かりませんが)。そ
    れではクライアントは聴こえないので意味がないですよね?

     

    クライアント側でダウンロードされて、再生される方法を考える必要があります。
    例えば、

     

    protected void Button2_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Data/" + TextBox1.Text);
    }

     

    とすると、クライアント側が Windows 環境で、Media Player がインストールさ
    れていて、拡張子 wav が Media Palyer に関連付けられていれば、Media Player
    が立ち上がって wav ファイルが再生されます。この場合はクライアント側での再
    生になります。

    2008年6月6日 5:36
  • HtmlTextWriter をどのように使おうとしているのか分かりませんが、IE にしか使えない bgsound や

    img を使っても良いなら、以下のようにすればヘルパーアプリを使わなくても再生できるようです。

    自分の環境 XP + ASP.NET2.0 + IE7 では検証済みです。

     

    Code Snippet

    <%@ Page Language="C#" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">

        protected string music;
       
        protected void Button1_Click(object sender, EventArgs e)
        {
            music = "data/" + TextBox1.Text;
            BgSound1.DataBind();
        }

    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>   
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
            <bgsound id="BgSound1" runat="server" src='<%# music %>' />   
        </div>
        </form>
    </body>
    </html>

     

     

    2008年6月6日 9:30
  • > HtmlTextWriterの件は、最終的にはデータベースから取得したファイル名から動的にHTMLを組
    > み立てる必要があるので(というか私がHTML内へのスクリプトの書き方を分かってないので)、
    > aspx.vbで処理を書こうとしているという訳です

     

    よく分かりませんが、TextBox からであろうと、データベースからであろうとファイル名さえ
    取得できれば、先のコードで music = "data/" + "ファイル名"; とすれば OK なはずですが?

     

    wav ファイルが data フォルダではなくデータベースにあるのですか? であればジェネリッ
    クハンドラを使ってはいかがですか?

     

    > <bgsound id="BgSound1" runat="server" src='<%# music %>' />
    > の部分を組み込んでみましたが、bgsoundに波線が出て、
    > 「警告 1 検証 (XHTML 1.0 Transitional): 要素 'bgsound' はサポートされていません。」
    > としかられてしまいました
    > 何かが足りないのでしょうか・・・

     

    何も足りないわけではありません。VWD の場合、デフォルトで、
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    が自動生成されるソースに含まれますが、XHTML1.0 と宣言しておきながら、XHTML1.0 でサポ
    ートされていない bgsound を使っているのでそのような警告が出るのです。警告なので、無
    視して実行できます。気になるようなら宣言を削除 or 変更してください。

    2008年6月6日 15:13

すべての返信

  • SoundPlayer というのは Windows フォームコントロールですよね? そもそも、それを

    Web アプリケーションで使うという点が問題だと思うのですが。

    2008年6月5日 9:09
  • SurferOnWwwさんの言われる通りです。Webクライアントで再生するのであれば、以下のページを参考にしてみて下さい。

     

    Playing Sounds On The Web
    http://www.w3schools.com/media/media_browsersounds.asp

    2008年6月5日 10:25
    モデレータ
  • 時間がなくて先のレスは説明不足でしたので補足します。

     

    ローカル環境でなら、フルパス( ~/data/ ではなくて、ドライブから、例えば、
    C:/Documents and Settings/...../data/ というように)にすればエラーは出ず、
    wav ファイルが再生されて PC から聴こえてくると思います。

     

    #実は、聴こえるはずがないと思っていたのですが、実際に自分でローカル環境
     で試してみたら聴こえました。(汗)

     

    でも、それはサーバー/クライアント環境ではサーバーが再生していることにな
    ります(実環境で実際にサーバーが再生できるかどうかは分かりませんが)。そ
    れではクライアントは聴こえないので意味がないですよね?

     

    クライアント側でダウンロードされて、再生される方法を考える必要があります。
    例えば、

     

    protected void Button2_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Data/" + TextBox1.Text);
    }

     

    とすると、クライアント側が Windows 環境で、Media Player がインストールさ
    れていて、拡張子 wav が Media Palyer に関連付けられていれば、Media Player
    が立ち上がって wav ファイルが再生されます。この場合はクライアント側での再
    生になります。

    2008年6月6日 5:36
  • SurferOnWww 様、回答ありがとうございました

    そもそも、Web アプリケーションの事を全く理解していなかったようです

    ASP.NETで音声を再生するサンプルを探してもなかなか見つからず、分からないままにSoundPlayer を使っていました

    申し訳ありませんでした

     

    2008年6月6日 6:22
  • trapemiya 様、回答ありがとうございました

    お教え頂いたページを見て、生成すべきHTMLはなんとなく見えてきました

    多分、<img dynsrc="mysound.wav">みたいなHTMLが出力できれば良いのかなと・・・

    それで、HtmlTextWriterクラスを使えば出力できそうに思えるのですが、まだ実現できていません

    (宣言とか値の割り当てとか、いろいろしかられています)

    もう少し頑張ってみます

    ありがとうございました

    2008年6月6日 6:53
  • SurferOnWww 様、重ね重ねありがとうございます

    サンプルコードまでご呈示頂き恐縮です

     

    それで、ファイルをダウンロードしてMediaPlayerで再生というよりも、出来ればWebページのバックグラウンドで再生できないかと思いまして、trapemiya様に教えて頂いたサイトの記述を頼りにHTMLの生成にトライしています

    (ここでもHtmlTextWriterの使い方が分からず苦戦しています)

     

    どうもありがとうございました

    2008年6月6日 7:00
  • HtmlTextWriter をどのように使おうとしているのか分かりませんが、IE にしか使えない bgsound や

    img を使っても良いなら、以下のようにすればヘルパーアプリを使わなくても再生できるようです。

    自分の環境 XP + ASP.NET2.0 + IE7 では検証済みです。

     

    Code Snippet

    <%@ Page Language="C#" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">

        protected string music;
       
        protected void Button1_Click(object sender, EventArgs e)
        {
            music = "data/" + TextBox1.Text;
            BgSound1.DataBind();
        }

    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>   
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
            <bgsound id="BgSound1" runat="server" src='<%# music %>' />   
        </div>
        </form>
    </body>
    </html>

     

     

    2008年6月6日 9:30
  •  

    SurferOnWww 様、ご教示ありがとうございます

    また、今回も詳細なサンプルコードを書いて頂き、感謝致します

     

    今回のシステムは社内の限られた環境での使用が目的なのでIE依存で構わないと考えています

    HtmlTextWriterの件は、最終的にはデータベースから取得したファイル名から動的にHTMLを組み立てる必要があるので(というか私がHTML内へのスクリプトの書き方を分かってないので)、aspx.vbで処理を書こうとしているという訳です

    別のテストプログラムで、ユーザーのキー入力からデータベースを検索して結果(表示するjpgファイル名と再生するwavファイル名)の取得まではできていますし、jpgの表示もできました

    後は音声の再生だけなのですが・・・

     

    教えていただいたコードの

    <bgsound id="BgSound1" runat="server" src='<%# music %>' />

    の部分を組み込んでみましたが、bgsoundに波線が出て、

    「警告 1 検証 (XHTML 1.0 Transitional): 要素 'bgsound' はサポートされていません。」

    としかられてしまいました

    何かが足りないのでしょうか・・・

    ちなみに開発環境はVistaSP1+VS2008+IE7です

     

    この週末を利用して勉強してみます

    ありがとうございました

     

    2008年6月6日 13:10
  • > HtmlTextWriterの件は、最終的にはデータベースから取得したファイル名から動的にHTMLを組
    > み立てる必要があるので(というか私がHTML内へのスクリプトの書き方を分かってないので)、
    > aspx.vbで処理を書こうとしているという訳です

     

    よく分かりませんが、TextBox からであろうと、データベースからであろうとファイル名さえ
    取得できれば、先のコードで music = "data/" + "ファイル名"; とすれば OK なはずですが?

     

    wav ファイルが data フォルダではなくデータベースにあるのですか? であればジェネリッ
    クハンドラを使ってはいかがですか?

     

    > <bgsound id="BgSound1" runat="server" src='<%# music %>' />
    > の部分を組み込んでみましたが、bgsoundに波線が出て、
    > 「警告 1 検証 (XHTML 1.0 Transitional): 要素 'bgsound' はサポートされていません。」
    > としかられてしまいました
    > 何かが足りないのでしょうか・・・

     

    何も足りないわけではありません。VWD の場合、デフォルトで、
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    が自動生成されるソースに含まれますが、XHTML1.0 と宣言しておきながら、XHTML1.0 でサポ
    ートされていない bgsound を使っているのでそのような警告が出るのです。警告なので、無
    視して実行できます。気になるようなら宣言を削除 or 変更してください。

    2008年6月6日 15:13
  • SurferOnWww 様、丁寧にお教えいただきありがとうございます

    警告の意味もわからずお恥ずかしい限りです

     

    今朝から、自宅で落ち着いて前回提示頂いたサンプルコードをそのまま動作させて見ました

    結果、自分の環境でもちゃんと音声の再生ができました

    (実はc#はよくわからなかったので、昨日はいきなり自分のプログラム(vb)に移植しようとしていました)

     

    それで、改めて自分のプログラム(vb)へ組み込んで見ました

    <script runat="server">
        Protected wavfile As String
        Protected Sub Button2_Click(ByVal Sender As Object, ByVal E As EventArgs)
            wavfile = "data/" + TextBox2.Text
            Label2.Text = wavfile
            BgSound1.DataBind()
        End Sub
    </script>

            <bgsound id="BgSound1" runat="server" src='<%# wavfile %>' />

    そして、結果は成功、無事再生できました

     

    SurferOnWww 様には大感謝です

    最後まで丁寧にご指導いただき、本当にありがとうございました

    2008年6月7日 2:43