Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159

Плеер: проигрывание звукового файла с командной строки

12.02.2011, 10:58. Показов 4587. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть плеер сделанный с помощью bass.dl как сделать так чтобы он проигрывал звуковой файл с командной строки например в cmd прописать так:с:\Project1.exe "Любэ - Луговая трава.mp3" чтоб именно эта песня стартанула.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2011, 10:58
Ответы с готовыми решениями:

Проигрывание отрезка звукового файла
Здравствуйте. Прошу помощи у многоуважаемых программистов в создании кнопки проигрывателя. Суть вопроса: - есть таблица...

Проигрывание звукового файла при звонке на Panasonic TDE100/200
Всем привет. Помогите разобраться. Есть АТС Panasonic TDE100/200 Сейчас при звонке нам на городской номер проигрывается голосове...

Обработка и проигрывание звукового файла без использования сторонних библиотек
Всем доброго времени суток! Мне задали в качестве экзаменационного задания по WINAPI, написать mp3-проигрыватель. Главное условие,...

23
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
12.02.2011, 11:26
C++
1
2
3
4
if(ParamCount()>0){ //если программа запущена с параметрами
    if(FileExists(ParamStr(1))) //проверяем существует ли файл
        if(ExtractFileExt(ParamStr(1)) == ".mp3")//Проверяем расширение
            Play(ParamStr(1));//Выполняем какую-то свою ф-цию
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
12.02.2011, 12:24  [ТС]
Спасибо за ответ вот только не знаю как это дело прикрутить к проге (сделать так чтоб я в командную строку вставил с:\Project1.exe "Любэ - Луговая трава.mp3" и она проигралась без нажатия чего либо при открытии на форме, кстате хороший код кому надо для вывода амплитуды звукового файла на график без проигрывания в реал тайме ):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
BASS_Init( -1,44100, BASS_DEVICE_3D,0,NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
AnsiString z=OpenDialog1->FileName;
char *a=z.c_str();
HSTREAM decoder=BASS_StreamCreateFile(FALSE, a, 0, 0, BASS_SAMPLE_FLOAT|BASS_STREAM_DECODE); // create a stream from the file
DWORD length=BASS_ChannelGetLength(decoder, BASS_POS_BYTE); // get byte length
float * data =(float *)malloc(length); // allocate a buffer for the data
length=BASS_ChannelGetData(decoder, data, length); // decode the stream into the buffer
for (DWORD i = 0; i < length/sizeof(float); i++) {
Series1->Add(data[i]);
}
//argc argv
//Timer2->Enabled = true;
}
1
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
12.02.2011, 12:46
Кидаешь код сюда:
C++
1
2
3
4
5
6
7
8
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
if(ParamCount()>0) //если программа запущена с параметрами
        if(FileExists(ParamStr(1))) //проверяем существует ли файл
                if(ExtractFileExt(ParamStr(1)) == ".mp3")//Проверяем расширение
        ... Тут Вызываешь функцию проигрывания файла ParamStr(1) //ParamStr(1) возвращает путь к файлу, который мы передали в командной строке
}
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
12.02.2011, 13:12  [ТС]
Добавлено через 13 минут
Как быть помогите плиз:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
if(ParamCount()>0) //если программа запущена с параметрами
        if(FileExists(ParamStr(1))) //проверяем существует ли файл
                if(ExtractFileExt(ParamStr(1)) == ".wav")//Проверяем расширение
 
 
AnsiString *a= ParamStr(1);
char *a;
HSTREAM decoder=BASS_StreamCreateFile(FALSE, a, 0, 0, BASS_SAMPLE_FLOAT|BASS_STREAM_DECODE); // create a stream from the file
DWORD length=BASS_ChannelGetLength(decoder, BASS_POS_BYTE); // get byte length
float * data =(float *)malloc(length); // allocate a buffer for the data
length=BASS_ChannelGetData(decoder, data, length); // decode the stream into the buffer
for (DWORD i = 0; i < length/sizeof(float); i++) {
Series1->Add(data[i]);
}
chan=BASS_StreamCreateFile(FALSE, a, 0,0,0);
BASS_ChannelPlay(chan,FALSE);
Timer1->Enabled = true;
}

[BCC32 Error] Unit1.cpp(28): E2034 Cannot convert 'UnicodeString' to 'AnsiString *'
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
12.02.2011, 14:03
попробуй
C++
1
char *a =  ParamStr(1).c_str();
Как там в 2010 я не знаю, но должен быть аналог...А то у меня только 6 и 2007 и там работает.

C++
1
2
3
4
//возможно
char * a = ParamStr(1).w_str();
//или
char * a = ParamStr(1).t_str();
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
12.02.2011, 15:54  [ТС]
Не хо-хо
Миниатюры
Плеер: проигрывание звукового файла с командной строки  
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
12.02.2011, 17:16
{ и } правильно расставь.
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
12.02.2011, 23:24  [ТС]
Не помогло, какие еще есть идеи?
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
13.02.2011, 01:37
Говорю же:
{ и } правильно расставь.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
if(ParamCount()>0) //если программа запущена с параметрами
    if(FileExists(ParamStr(1)) && ExtractFileExt(ParamStr(1) == ".wav"){
        char *a = ParamStr(1).t_str;
        HSTREAM decoder=BASS_StreamCreateFile(FALSE, a, 0, 0, BASS_SAMPLE_FLOAT|BASS_STREAM_DECODE); // create a stream from the file
        DWORD length=BASS_ChannelGetLength(decoder, BASS_POS_BYTE); // get byte length
        float * data =(float *)malloc(length); // allocate a buffer for the data
        length=BASS_ChannelGetData(decoder, data, length); // decode the stream into the buffer
        for (DWORD i = 0; i < length/sizeof(float); i++) 
            Series1->Add(data[i]);
        chan=BASS_StreamCreateFile(FALSE, a, 0,0,0);
        BASS_ChannelPlay(chan,FALSE);
        Timer1->Enabled = true;
    }
}
От той ошибки которая была это как раз поможет.
Если не помагает, то какая ошибка выскакивает?
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
13.02.2011, 01:59  [ТС]
---------------------
Миниатюры
Плеер: проигрывание звукового файла с командной строки  
0
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
13.02.2011, 02:07
Ну потерял я одну скобку, что так сложно разобраться?
".wav")){

P.S.
Никогда не переписывайте код в тупую.
В код нужно вникать и пытаться решить проблему самому, а не писать по поводу каждой мелочи на форум.
Иначе ничего не научитесь.
2
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
13.02.2011, 02:52

Не по теме:

Цитата Сообщение от FaB0SS Посмотреть сообщение
... а не писать по поводу каждой мелочи на форум.
Иначе ничего не научитесь.
а как определить что является мелочью?
например я ток сегодня узнало что
C++
1
2
int X;
int Z = X + 1;
не факт что Z будет равно 1, так как X может
быть случайным числом (а я думал что при объявлении переменной она равна 0)



А по поводу всего остального полностью согласен с Вами!
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
13.02.2011, 14:41  [ТС]
Списибо огромное за ответы. Я только начинаю программировать по этому так получается. Все зароботало.
0
5 / 5 / 0
Регистрация: 10.02.2011
Сообщений: 10
14.02.2011, 19:39
Цитата Сообщение от serg87i Посмотреть сообщение
кстате хороший код кому надо для вывода амплитуды звукового файла на график без проигрывания в реал тайме ):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
BASS_Init( -1,44100, BASS_DEVICE_3D,0,NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
AnsiString z=OpenDialog1->FileName;
char *a=z.c_str();
HSTREAM decoder=BASS_StreamCreateFile(FALSE, a, 0, 0, BASS_SAMPLE_FLOAT|BASS_STREAM_DECODE); // create a stream from the file
DWORD length=BASS_ChannelGetLength(decoder, BASS_POS_BYTE); // get byte length
float * data =(float *)malloc(length); // allocate a buffer for the data
length=BASS_ChannelGetData(decoder, data, length); // decode the stream into the buffer
for (DWORD i = 0; i < length/sizeof(float); i++) {
Series1->Add(data[i]);
}
//argc argv
//Timer2->Enabled = true;
}
Расскажите пожалуйста новичку поподробней об этом коде я так понимаю я могу получить спектрограмму муз файла без его проигрывания какие мне компоненты для этого нужны кроме
Button1, OpenDialog1. что это такое Series1->Add(data[i]);, в каком компоненте отображать спектрограмму?
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
14.02.2011, 21:11  [ТС]
Тебе нужна библеотека bass.dll на форуме можешь скачать либо на официальном сайте. График рисуется с помощью компонента TChart. Series1->Add это собственно сама линия на этом компоненте. С помощью этой библеотеки можно делать со звуком что-угодно.
0
5 / 5 / 0
Регистрация: 10.02.2011
Сообщений: 10
14.02.2011, 21:48
примерчиком не поделитесь? у вас я так понял все равно наработки есть в этой теме. А библиотеку я эту знаю потому увидев нужный мне код для неё решил с просить но мои познания в си пока малы
вот что я делал уже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "bass.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HSTREAM chan;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Инициализируем библиотеку
BASS_Init( -1,44100, BASS_DEVICE_3D,0,NULL);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute())//пользователь выбирает файл
 {
 AnsiString b=OpenDialog1->FileName;//считываем имя файла
 char *a=b.c_str();//переводим тип AnsiString в char
 
 //создаем поток для нашего MP3 файла
 chan=BASS_StreamCreateFile(FALSE, a, 0, 0, 0);
 
 //Запускаем звучание песни
 BASS_ChannelPlay(chan,FALSE);
 }
}
//---------------------------------------------------------------------------
1
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
15.02.2011, 00:51  [ТС]
Собственно код чуть выше! TChart кинь на форму и добавь в нем сериес. Но рисует медленно! Вавы быстро. Щас работаю над этим.
0
5 / 5 / 0
Регистрация: 10.02.2011
Сообщений: 10
15.02.2011, 19:54
собственно вот чего пытаюсь добита http://alexval2007.ucoz.ru/dowanloads/spectrum.gif

Добавлено через 58 минут
вот что у меня вышло
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "bass.h"  // Подключаем библиотеку для работы с музыкой
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm11 *Form11;
HSTREAM chan;
#define SPECWIDTH 368  // Ширина спектра
#define SPECHEIGHT 127 // Высота спектра
float Y_Pos[28];       //Сюда будет попадать сила спектра канала от 0.0 до 1.0
 
 
//---------------------------------------------------------------------------
__fastcall TForm11::TForm11(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm11::FormCreate(TObject *Sender)
{
//Инициализируем библиотеку
BASS_Init( -1,44100, BASS_DEVICE_3D,0,NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm11::ButtonFileOpenClick(TObject *Sender)
{
  if (OpenDialog1->Execute())         //пользователь выбирает файл
  {
  AnsiString b=OpenDialog1->FileName;//считываем имя файла
  char *a=b.c_str();                 //переводим тип AnsiString в char
//**********************************************************************************************
// spectrum
  // create a stream from the file
  HSTREAM decoder=BASS_StreamCreateFile(FALSE, a, 0, 0, BASS_SAMPLE_FLOAT|BASS_STREAM_DECODE);
  DWORD length=BASS_ChannelGetLength(decoder, BASS_POS_BYTE); // get byte length
  float * data =(float *)malloc(length);                      // allocate a buffer for the data
  length=BASS_ChannelGetData(decoder, data, length);          // decode the stream into the buffer
    for (DWORD i = 0; i < length/sizeof(float); i++)
    {
      Series1->Add(data[i]);   // это собственно сама линия на компоненте TChart.
    }
//*******************************************************************************
//создаем поток для нашего MP3 файла
   chan=BASS_StreamCreateFile(FALSE, a, 0, 0, 0);
  }
}
//**************************************************************************
//---------------------------------------------------------------------------
/* Воспроизводение */
 void __fastcall TForm11::ButtonPlayClick(TObject *Sender)
{
 BASS_ChannelPlay(chan,FALSE); // воспроизводим звук
}
//---------------------------------------------------------------------------
/* Пауза */
  void __fastcall TForm11::ButtonPauseClick(TObject *Sender)
{
  BASS_ChannelPause(chan);  // Пауза
}
//---------------------------------------------------------------------------
/* Стоп */
void __fastcall TForm11::ButtonStopClick(TObject *Sender)
{
BASS_ChannelStop(chan);  // останавливаем звучание
BASS_StreamFree(chan);   // освобождаем ресурсы
}
//---------------------------------------------------------------------------
Проблема в том что слишком долго строит спектограмму пишу в C++ Builder 6

проэкт скачать
1
68 / 68 / 9
Регистрация: 10.02.2011
Сообщений: 131
15.02.2011, 20:39
Зачем тебе отрисовывать каждую точку?
при открытии 8-ми минутного Wav-файла переменная length = 201000000.
Это же представляешь сколько точек нужно отрисовать!
при этом прога даже не дорисовывает, а вылетает из-за того что использует больше 2-гигов памяти...
C++
1
2
3
4
    for (DWORD i = 0; i < length/sizeof(float); i+=10000)
    {
    Series1->Add(data[i]);
    }
с шагом в 10000 этот 8-ми минутный файл отрисовывается меньше секунды.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.02.2011, 20:39
Помогаю со студенческими работами здесь

Плеер - непрерывное проигрывание
Привет ребят.Помогите пожалуйста. подскажите можно ли на сайте сделать проигрыватель который будет играть следующую компазицию если...

Получение строки с Arduino через Com port и проигрывание аудио-файла
у меня возникла проблема, ардуино отправляет строки &quot;Motion detected!&quot; и &quot;Motion ended!&quot; в порт com1 и мне нужно что бы была программа на...

Копирование файла, используя имена исходного и копируемого файла как аргументы командной строки
Напишите программу копирования файла, которая использует имена исходного файла и копируемого файла как аргументы командной строки. ...

Чтение файла из командной строки
Набрал код из книги Шилдта (8-е изд.), глава 13 &quot;Чтение и запись данных в файлы&quot;. В командной строке из каталога с файлом программы ее...

Компиляция срр файла из командной строки
Здравствуйте! Пытаюсь из командной строки скомпилировать файл, но выводит такую ошибку fatal error c1041: cannot open program...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru