Zvuk - kde dělám chybu?   zodpovězená otázka

VB.NET

Dobrý den,

pracuji na aplikaci, kde by se měl přehrávat zvuk. Když nastavím

 Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
    Public Const SND_ASYNC = &H1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        i = Int(Rnd() * 3) + 1
        If i = 1 Then
            Call mciExecute("Play C:\ptaci\zvuky\kukacka.wav")
            Button1.Text = "kukačka"
        ElseIf i = 2 Then
            Call mciExecute("Play C:\ptaci\zvuky\hrdlicka.wav")
            Button1.Text = "hrdlička"
        ElseIf i = 3 Then
            Call mciExecute("Play C:\ptaci\zvuky\pustik.wav")
            Button1.Text = "puštík"
        End If
    End Sub

Aplikace funguje. Pokud ale chci ty zvukové soubory (respektive celou složku ptaci) umístit do Program Files a kód upravím

Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
    Public Const SND_ASYNC = &H1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        i = Int(Rnd() * 3) + 1
        If i = 1 Then
            Call mciExecute("Play C:\Program Files\ptaci\zvuky\kukacka.wav")
            Button1.Text = "kukačka"
        ElseIf i = 2 Then
            Call mciExecute("Play C:\Program Files\ptaci\zvuky\hrdlicka.wav")
            Button1.Text = "hrdlička"
        ElseIf i = 3 Then
            Call mciExecute("Play C:\Program Files\ptaci\zvuky\pustik.wav")
            Button1.Text = "puštík"
        End If
    End Sub

Aplikace fungovat přestane. Hlásí, že nenalezl cestu k zadaným souborům. Poraďte, prosím co s tím. Děkuji Adéla

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den

pokud aplikace přestane fungovat při pouhém překopírování zvuků jinam, zkontroloval bych:

1) Zda máte dobře zadanou cestu. (Např. pokud používáte 64 bitový systém zda nemáte dané soubory ve složce Program Files 64)

2) Zda má aplikace dostatečná oprávnění pro čtení v dané složce.

Pokud zvuky budou vždy v program files tak bych taky asi nezadával cestu natvrdo, ale použil bych:

'vrátí cestu do Program Files
My.Computer.FileSystem.SpecialDirectories.ProgramFiles

To vám zajistí, že se budete vždy odkazovat na správné umístění, protože ne vždy musí být Program Files a složky uživatelů na stejném disku jako systém.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Musím tam ještě nadeklarovat nějaké proměnné? A byla by ta syntexe

            Call mciExecute("Play " & My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\ptaci\zvuky\hrdlicka.wav")

takto dobře? Když to totiž zapíšu takhle, ohlásí mi "Zařízení není otevřené nebo ho MCI neropoznává" - Co s tím? Děkuji za odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vypadá to OK, jen pro spojování řetězců reprezentující nějákou cestu používejte IO.Path.Combine

např:

IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.ProgramFiles,"ptaci\zvuky\hrdlicka.wav"

nabudete si muset hlídat zda Vám ve spojované části nechybí nebo nepřebývá lomítko;)

Jinak bych dal na doporučení kolegy v příspěvku podemnou.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím,

pokud jde jen o soubory typu *.wav tak se nemusíte patlat s MCI a můžete využít mnohem pohodlnější třídu System.Media.SoundPlayer.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc, už to funguje a je to fakt mnohem snadnější. Adéla

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Opravdu začněte používat System.Media.SoundPlayer nebo Managed DirectX (Microsoft.DirectX.AudioVideoPlayback).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zaujímavé:

Tu sú vtáci a tam zvieratá:

http://www.vbnet.cz/forum-tema--3458-jak...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vy nemáte pocit, že na uvedenom linku je ten istý dotaz a že to, čo som tam uviedol, rieši túto otázku?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

lze toho docílit např. tak jak Vám říkal pan Linhart tj. použítí DirectX.Nejprve si stáhněte DirectX SDK.Zapněte Visual Basic.V menu zvolte Project pak Add reference a najděte tam Microsoft.DirectX a Microsoft.Directx.AudioVideoPlayback.Poté musíte připsat tyto dva řádky kódu(úplně nahoru).

Imports Microsoft.DirectX
Imports Microsoft.DirectX.AudioVideoPlayback

Teď napíšete tento lehký kód a máte hotovo:

    Dim sound As Audio
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        sound = New Audio("C:\sound.mp3")
        sound.Play()
    End Sub

Přeji hezký večer.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback