Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение mp3, Кто-нибудь что-нибудь об этом знает? 
:(
    Опции темы
АлексейМ
  Дата 7.10.2005, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Приветствую! smile

Я пишу программку, которая должна через определённый интервал времени воспроизводить заданное количество раз файл mp3.

Программа должна автоматически определять длительность трека (для того, чтобы высчитывать интервал между проигрываниями трека). Ведь инфа о длительности трека содержится в самом mp3-файле. Только вот как прочитать эту инфу о треке? Посоветуйте, пожалуйста.

И ещё вопросик - какими функциями посоветуете пользоваться для того, чтобы проигрывлся сам трек?


PM MAIL   Вверх
chaos
Дата 7.10.2005, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



в помощь тебе макросы MCIWnd смотри в мсдн, там ВСЕ есть!!!
PM WWW   Вверх
АлексейМ
Дата 7.10.2005, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо!

Только вот у меня с msdn проблемка - мой vcpp сильно ругается, типа "Переустанови MSDN!". А где его достать? Подскажите smile
PM MAIL   Вверх
chaos
Дата 7.10.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата
А где его достать? Подскажите smile

купить))
или пользуй онлайн мсдн, вот ссылка для решения твоей проблемы
mciwnd_reference
PM WWW   Вверх
АлексейМ
Дата 7.10.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Благодарю smile
PM MAIL   Вверх
chaos
Дата 7.10.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



вот тебе еще не большой smile пример(тоже сталкивался с такой проблемой и написал свой класс)
h
Код

#include <vfw.h>

#pragma comment(lib, "vfw32.lib")

#define MS_MINUTE(ms)    (int(msf / 1000 / 60))
#define MS_SECOND(ms)    (int(msf / 1000))

class CSoundPlay
{
    CString m_soFileName;
    HWND m_hParent, m_hPlayer;
    bool m_fPlay;
public:
    CSoundPlay(HWND hParent = NULL)
        :m_hParent(hParent), m_hPlayer(NULL), 
        m_fPlay(false)
    {}

    ~CSoundPlay()
    { 
        MCIWndDestroy(m_hPlayer);
    }
    bool Init(HWND hParent);

    long Open(const char* c_sFileName);
    long Close();
    long Play();
    long PlayFromTo (long lPosFrom, long lPosTo = MCIWND_END); //milisecond
    long Pause();
    long Resume();
    long Stop();
    
    unsigned GetVolume(); 
    long SetVolume(unsigned uVolume);
    
    long GetPosition(); //milisecond
    long SetPosition(long lPos); //milisecond

    long GetLenght(); //milisecond

    enum _EVolume 
    {Min = 0, Avg = 50, Max = 100};
    typedef _EVolume Volume;
};


cpp

Код

#include "PlaySound.h"

bool CSoundPlay::Init(HWND hParent)
{
    m_hParent = hParent;
    ASSERT(m_hParent);

    m_hPlayer = MCIWndCreate(m_hParent,
                            AfxGetInstanceHandle(),
                            WS_CHILD | MCIWNDF_NOMENU| MCIWNDF_NOTIFYALL | MCIWNDF_NOPLAYBAR,
                            NULL);
    return m_hPlayer ? true : false; 
}

long CSoundPlay::Open(const char* c_sFileName)
{
    ASSERT(m_hPlayer);
    long lResult = 0;
    if (m_fPlay) 
        lResult = Close();

    if (c_sFileName && 0 == lResult)
    {
        m_soFileName = c_sFileName;
        lResult = MCIWndOpen(m_hPlayer, (char*)c_sFileName, NULL);
    }

    return lResult;
}

long CSoundPlay::Close()
{
    ASSERT(m_hPlayer);
    long lResult = MCIWndClose(m_hPlayer);
    if (0 == lResult)
    {
        m_fPlay = false;
        m_soFileName = "";
    }
    return lResult;
}

long CSoundPlay::Play()
{
    ASSERT(m_hPlayer);
    long lResult = 0;
    if (m_fPlay) 
        lResult = Stop();

    if (0 == lResult)
    {
        lResult = SetVolume(Volume::Avg);
        if (0 == lResult)
        {
            lResult = SetPosition(MCIWND_START);
            if (0 == lResult)
            {
                lResult = MCIWndPlay(m_hPlayer);
                m_fPlay = true;
            }
        }
    }

    return lResult;
}

long CSoundPlay::PlayFromTo (long lPosFrom, long lPosTo/* = MCIWND_END*/)
{
    ASSERT(m_hPlayer);
    return MCIWndPlayFromTo(m_hPlayer, lPosFrom, lPosTo);
}

long CSoundPlay::Pause()
{
    ASSERT(m_hPlayer);
    return MCIWndPause(m_hPlayer);
}

long CSoundPlay::Resume()
{
    ASSERT(m_hPlayer);
    return MCIWndResume(m_hPlayer);
}

long CSoundPlay::Stop()
{
    ASSERT (m_hPlayer);
    long lResult = MCIWndStop(m_hPlayer);
    if (0 == lResult)
        m_fPlay = false;
    return lResult;
}

unsigned CSoundPlay::GetVolume()
{
    ASSERT(m_hPlayer);
    return unsigned(MCIWndGetVolume(m_hPlayer) * 0.1);
}

long CSoundPlay::SetVolume(unsigned uVolume)
{
    ASSERT(m_hPlayer);
    if (uVolume > 100)
        uVolume = Volume::Max;

    return MCIWndSetVolume(m_hPlayer, uVolume * 10);
}

long CSoundPlay::GetPosition()
{
    ASSERT(m_hPlayer);
    return MCIWndGetPosition(m_hPlayer);
}

long CSoundPlay::SetPosition(long lPos)
{
    ASSERT(m_hPlayer);

    long lResult = MCIWndStop(m_hPlayer);
    if (0 == lResult)
        lResult = MCIWndPlayFrom(m_hPlayer, lPos);

    return lResult;
}

long CSoundPlay::GetLenght()
{
    ASSERT(m_hPlayer);
    return MCIWndGetLength(m_hPlayer);
}


Это сообщение отредактировал(а) chaos - 7.10.2005, 12:30
PM WWW   Вверх
АлексейМ
Дата 7.10.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Просмотрел я это дело (по ссылке). Но по причине моего невысокого уровня владения английским и небольшого опыта программирования, у меня всё же остались вопросы.

Присмотрел я макрос MCIWndPlay для проигрывания трека. Пытаюсь разобраться. Выбор-то правильный?

Вопрос ко всем, кто имеет опыт работы с подобными вещами: например, нужно прочитать (воспризвести) лежащий на жёстком диске файл mp3. Какими функциями, макросами и в каком порядке посоветуете пользоваться?

И ещё - может, есть где в сети русская версия библиотеки мсдн?

P.S. Извиняюсь за такое большое количество вопросов.
Добавлено @ 15:53
Упс...

Написал своё сообщение в оффлайне, не знал, что уже кое-что есть smile smile smile

Спасибо!!!

Это сообщение отредактировал(а) АлексейМ - 7.10.2005, 15:54
PM MAIL   Вверх
chaos
Дата 7.10.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



если будешь пользоваться классом (см. выше)
то тебе для того чтобы проиграть файл на диске надо всего сделать
Пример: MFC-приложение на базе CDialog
Код

CSoundPlay m_oMp3Play;
....

BOOL CMp3Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    SetIcon(m_hIcon, TRUE);        
    SetIcon(m_hIcon, FALSE);        
    
    m_oMp3Play.Init(m_hWnd);
    
    return TRUE; 
}

.....

m_oMp3Play.Open("D:\\Music\\01.mp3");
m_oMp3Play.Play();
......

m_oMp3Play.Close();

..........


Это сообщение отредактировал(а) chaos - 7.10.2005, 18:14
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.