Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Музыка в консоли 
:(
    Опции темы
Toyamatokanava
Дата 8.11.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

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



Можно ли воспроизвести музыку  в консоли?
PM MAIL   Вверх
xvr
Дата 8.11.2012, 18:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Разрешаем, воспроизводи  smile 

А если серьезно, то какая ОС?

PM MAIL   Вверх
Toyamatokanava
Дата 8.11.2012, 18:12 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

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



А как это зависит от ОС?) У меня windows xp.
PM MAIL   Вверх
McMan
Дата 8.11.2012, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 21.2.2007
Где: Ярославль

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



mpg123 портирован под операционную систему Windows при помощи Cygwin и MinGW, говорят.

Это сообщение отредактировал(а) McMan - 8.11.2012, 18:52
PM MAIL   Вверх
xvr
Дата 9.11.2012, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Toyamatokanava @  8.11.2012,  18:12 Найти цитируемый пост)
А как это зависит от ОС?)

Напрямую. Работа со звуком весьма и весьма зависит от ОС.

Цитата(Toyamatokanava @  8.11.2012,  18:12 Найти цитируемый пост)
У меня windows xp. 

Ну например так:
Код

#define STRICT
#define _ATL_FREE_THREADED

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#include <atlbase.h>

#include <INITGUID.H>
#include <DShow.h>

void chk_(HRESULT hr, const char* str)
{
 if (hr<0)
  {
   printf("Error %08X in %s\n",hr,str);
   exit(1);
  }
}

#define HR(v) chk_(v,#v)
#define mERROR(msg) chk_(-1,msg)

void run(char* nm)
{
 USES_CONVERSION;
 
 CComPtr<IGraphBuilder> graph_builder;
 HR(graph_builder.CoCreateInstance(CLSID_FilterGraph));
 HR(graph_builder->RenderFile(A2W(nm),NULL));
 
 CComQIPtr<IMediaControl> graph_ctrl(graph_builder);
 if (!graph_ctrl) mERROR("Can't get IMediaControl interface from Graph");
 HR(graph_ctrl->Run());

 getchar(); 
}

int main(int argc, char** argv)
{
 if (argc<=1) mERROR("Expected file name");
 CoInitialize(0);
 run(argv[1]);
 CoUninitialize();
 return 0;
}
Играет что угодно (в количестве 1 шт), поданное с командной строки


Это сообщение отредактировал(а) xvr - 9.11.2012, 16:01
PM MAIL   Вверх
Toyamatokanava
Дата 9.11.2012, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

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



Откомпилировалось, но выдает следующее.

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  1.jpg 41,23 Kb
PM MAIL   Вверх
xvr
Дата 9.11.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



А вы имя файла параметром передали при старте? И файл существует?

PM MAIL   Вверх
Toyamatokanava
Дата 9.11.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

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



Нет, я подумал, что нужно прописать путь после компиляции. Извиняюсь за глупости, я новичок просто.) Объясните пожалуйста по подробней что да как.)
PM MAIL   Вверх
xvr
Дата 9.11.2012, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Toyamatokanava @  9.11.2012,  14:35 Найти цитируемый пост)
Нет, я подумал, что нужно прописать путь после компиляции.

При запуске программы ей нужно передать имя файла, который надо проигрывать. Если вы запускаете программу из VS, то параметр прописывается в свойствах проекта, на вкладке Debug (кажется).

Или просто пропишите в саму программу, вместо A2W(nm) напишите L"<путь к файлу>" (например если файл trampampam.mp3 лежит в корне диска С напишите L"C:\\trampampam.mp3")

PM MAIL   Вверх
Toyamatokanava
Дата 9.11.2012, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

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



xvr, спасибо вам, так все работает.) А можно вас попросить объяснить функцию void run? 

Код

void run(char* nm)
{
 USES_CONVERSION;
 
 CComPtr<IGraphBuilder> graph_builder;
 HR(graph_builder.CoCreateInstance(CLSID_FilterGraph));
 HR(graph_builder->RenderFile(L"C:\\1.mp3",NULL));
 
 CComQIPtr<IMediaControl> graph_ctrl(graph_builder);
 if (!graph_ctrl) mERROR("Can't get IMediaControl interface from Graph");
 HR(graph_ctrl->Run());

 getchar(); 
}
 
PM MAIL   Вверх
xvr
Дата 10.11.2012, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Toyamatokanava @  9.11.2012,  16:42 Найти цитируемый пост)
А можно вас попросить объяснить функцию void run? 

А это собственно и есть проигрывание (с помощью DirectShow)
Код

void run(char* nm)
{
 USES_CONVERSION;
 
 CComPtr<IGraphBuilder> graph_builder;
 HR(graph_builder.CoCreateInstance(CLSID_FilterGraph)); // Создается COM объект GraphBuilder из DirectShow
 HR(graph_builder->RenderFile(L"C:\\1.mp3",NULL)); // Ему на вход дают файл, и он строит граф из фильтров DirectShow, который сможет распаковать и проиграть этот файл (это может быть как звуковой, так и видео файл)
 
 CComQIPtr<IMediaControl> graph_ctrl(graph_builder); // Запрашивается интерфейс MediaControl (от GraphBuilder). Этот интерфейс позволяет управлять построенным графом
 if (!graph_ctrl) mERROR("Can't get IMediaControl interface from Graph");
 HR(graph_ctrl->Run()); // Граф запускается на выполнение.
 getchar(); // Т.к. граф выполняется асинхронно, то явно ждем нажатия клавиши, что бы завершить программу
}

По поводу графов фильтров в DirectShow см тут и тут


PM MAIL   Вверх
Toyamatokanava
Дата 16.11.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

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



Странно, программа перестала открывать файл  с музыкой, хотя и ничего не изменял. Буду разбираться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

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


 




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


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

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