Přehrávání playlistu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Přehrávání playlistu – .NET – Fórum – Programujte.comPřehrávání playlistu – .NET – Fórum – Programujte.com

 

Tomáš Lipovský
~ Anonymní uživatel
9 příspěvků
12. 2. 2016   #1
-
0
-

Ahoj,
měl bych takový menší problém...

Pořebuji přehrávat předem mnou známé zvuky; v tomto případě zvuk1.mp3 a zvuk2.mp3.

Používám knihovnu Microsoft.DirectX.AudioVideoPlayback.

Spustím zvuk1 a aktivuji casovac takto:

zvuk = Audio.FromFile("C:/zvuk1.mp3");
zvuk.Play();
casovac.Enabled = true;

Časovač má interval 100 ms. Tady je jeho událost:

private void casovac_Tick(object sender, EventArgs e)
{
   if (zvuk.Duration == zvuk.CurrentPosition)
      prehrajzvuk("C:/zvuk2.mp3");
}

Problémem však je, že se zvuk2 nespouští hned po dohrání zvuku1, ale až po chvíli (není to až tak hrozné, ale i 1 sekunda vadí...). Domnívám se, že je problém s hodnotou zvuk.CurrentPosition - ta je v celých sekundách, ne milisekundách.

Nevíte prosím správné řešení této situace? (Asi tuším, že timer by použil pouze horší začátečník...)

Mockrát díky za odpovědi.

Tomáš

Nahlásit jako SPAM
IP: 94.112.208.–
Matěj Andrle+1
Grafoman
13. 2. 2016   #2
-
0
-

#1 Tomáš Lipovský
Pokud jde jen o zvuky, pak bych užil BATCH -> v něm snadno spustíš soubor ve výchozím programu. (Příkazem start.) Pokud by ti vadilo, že vyskočí další okno, lze jej skrýt. Tohoto lze dosáhnout i přímo v C# - ten bych však použil pouze s nějakým hlubším problémem... (Tedy zkrátka použij výchozí přehrávač, namísto jader různých prohlížečů přepracovaných k těmto podivným účelům. Okno tohoto prohlížeče můžeš snadno skrýt - některé uvolují přehrávání bez spuštění grafiky.)

Nahlásit jako SPAM
IP: 31.30.56.–
Tomáš Lipovský
~ Anonymní uživatel
9 příspěvků
13. 2. 2016   #3
-
0
-

#2 Matěj Andrle
To asi nepůjde... Co kdyby třeba uživatel přehrával nějakou svoji písničku - to by se jeho písnička přerušila.
Navíc i má aplikace by občas mohla narazit na to, že by něco hrálo přes jiné. Pak by se původní zvuk přerušil, nebo ne?

DirectX podporuje přehrávání více zvuků najednou, jejich přehrávání přerušíš příkazem zvuk.Stop.

Ale já bych opravdu potřeboval lepší styl zápisu mého špatného kódu, aby při přehrávání těchto dvou zvuků nebyla žádná mezera. Případně jinou knihovnu.

Omlouvám se za náročnost...

Nahlásit jako SPAM
IP: 94.112.208.–
Matěj Andrle+1
Grafoman
13. 2. 2016   #4
-
0
-

#3 Tomáš Lipovský
Vůbec ne - stačí použít správné argumenty pro příkaz start a samotný výchozí program. Chce to si projít manuály atd. Ale rozhodně ti nepomůže jakákoli rada, pokud problému dostatečně neporozumíš.

Nahlásit jako SPAM
IP: 31.30.56.–
BDS+3
Věrný člen
13. 2. 2016   #5
-
0
-

#3 Tomáš Lipovský
já jsem vždy pro přehrávání audia (i videa) používal MCI

https://www.youtube.com/watch?v=STNAOk_IiqE

https://msdn.microsoft.com/en-us/library/windows/desktop/dd743373(v=vs.85).aspx

je to sice trochu více psaní, ale mě se ze všeho co jsem zkoušel zdálo MCI nejlepší + (přehraje všechny formáty, pro které máš nainstalované kodeky).

k DirectX.AudioVideoPlayback jsem se zatím ještě nedostal.

ps. cestu máš blbě, místo "C:/zvuk1.mp3" by mělo být "C:\\zvuk1.mp3", případně @"C:\zvuk1.mp3". Jestli to zkoušíš takto blbě, (pokud ten soubor aplikace vůbec najde) může to způsobovat pomalé spuštění tím, že to ten soubor "dlouho" hledá.

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
q
~ Anonymní uživatel
219 příspěvků
13. 2. 2016   #6
-
+1
-
Zajímavé
BDS +

Udělej si dvě instance Audia, jednu budeš přehrávat, do druhé přednačteš další soubor a pak je prohodíš.

Události Stopping/Ending pravděpodobně nepřicházejí se zpožděním, takže ten časovač nepotřebuješ.

Nahlásit jako SPAM
IP: 213.211.51.–
BDS+3
Věrný člen
14. 2. 2016   #7
-
0
-

Ano, teď jsem si to ze zvědavosti zkusil, a opravdu stačí jen reagovat na událost Ending.., mp3, wav, wma.. se přehrávají bez zpoždění.

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Tomáš Lipovský
~ Anonymní uživatel
9 příspěvků
20. 2. 2016   #8
-
0
-

#7 BDS
Trochu nechápu, jak to myslíš. Jak to mám udělat s těmi dvěma instancemi?

Promiň, jsem ještě začátečník :-(

Nahlásit jako SPAM
IP: 94.112.208.–
BDS+3
Věrný člen
21. 2. 2016   #9
-
0
-

#8 Tomáš Lipovský
jsi psal, že potřebuješ přehrávat dva zvuky najednou. Tak bys přehrával něco v jedné instanci a něco v druhé.

Kdyby ses dělal běžný přehrávač, ve kterém bys přehrával jednu stopu za druhou tak si vystačíš i s jednou instancí.

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Tomáš Lipovský
~ Anonymní uživatel
9 příspěvků
21. 2. 2016   #10
-
0
-

#9 BDS
Já jsem psal, že by se mohla stát situace, kdy by se přehrávaly dva zvuky najednou (ale výchozí stav to není).

Ptám se - jak v DirectX-u přehrávat dva a více (krátkých) zvuků za sebou, aniž by zde bylo sekundové zpoždění (viz můj současný kód nahoře). Jak použít to Stopping/Ending?

Nahlásit jako SPAM
IP: 94.112.208.–
BDS+3
Věrný člen
21. 2. 2016   #11
-
0
-

Tady máš projekt, na kterém jsem si zkoušel funkčnost přehrávače audia.

odkaz: http://www4.zippyshare.com/v/2UEvpTjY/file.html

a tady je kód: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Microsoft.DirectX.AudioVideoPlayback;

namespace WFA14
{
    public partial class Form1 : Form
    {
        private int tracknum = -1;
        private static Audio audio; 
        // lbLst je listbox se seznamem souborů
        public Form1()
        {
            InitializeComponent();
        }

        private void OpenItem()
        {
            try
            {
                if (audio == null || audio.Disposed)
                {
                    audio = new Audio(lbLst.Items[tracknum].ToString(), true);
                    audio.Ending += PlayNext;
                }
                else audio.Open(lbLst.Items[tracknum].ToString(), true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void PlayNext(Object sender, EventArgs e)
        {
            tracknum++;
            if (tracknum >= lbLst.Items.Count) tracknum = 0;
            OpenItem();
        }

        private void btPlay_Click(object sender, EventArgs e)
        {
            if (audio == null || tracknum < 0 || audio.Disposed)
            {
                if (tracknum < 0 || tracknum >= lbLst.Items.Count) tracknum = 0;

                OpenItem();
            }
            else
            {
                if(audio.Paused)
                {
                    try
                    {
                        audio.Play();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
                else
                {
                    audio.Stop();
                    OpenItem();
                }
            }
        }

        private void btStop_Click(object sender, EventArgs e)
        {
            if(audio != null && !audio.Disposed)
            {
                if (audio.Playing || audio.Paused) audio.Stop();
            }
        }

        private void btPause_Click(object sender, EventArgs e)
        {
            if (audio != null && !audio.Disposed)
            {
                if (audio.Playing) audio.Pause();
            }
        }

    }
}

kód není finální, pouze začátečnicky narychlo splácaný. Může obsahovat nedostatky.

Nahlásit jako SPAM
IP: 185.69.69.–
W11 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

Podobná vlákna

Přehrávání muziky — založil Jakub Vojáček

Prehravani DVBT — založil wetty

Přehrávání zvuku — založil Noneus

Přehrávání mp3 souboru — založil hejnallukas

Tkinter přehrávání videa — založil john-smith

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý