ПредишенСледващото

Тази статия се обсъждат функция mciSendString, което е в winmm.dll библиотека. Тази функция може да дава команди за всяко устройство, MCI (управление на интерфейса Media) (подкрепен от мултимедийна система устройство: WAV, MIDI, CDAudio, видео и т.н.).
Ето нейния синтаксис:
MCIERROR mciSendString (
LPCTSTR lpszCommand,
LPTSTR lpszReturnString,
UINT cchReturn,
МАНИПУЛАЦИИ hwndCallback
);
lpszCommand - екип;
lpszReturnString - линия резултат;
cchReturn - размер в резултат на поредица от букви;
hwndCallback - Преглед прозорец (използва се само при първия параметър "уведомява" флаг).
Всички допълнителни примери са написани на Delphi, но в превод на други езици, според мен, в мазето.
Сега, ние сме съгласни с параметрите mciSendString функция в следните примери:

HwndCallback: ще отчита стойността 0;

CchReturn: ще бъде настроен на 64 (в MSDN е писано, че е максималната дължина на грешка, която може да бъде върнат параметър lpszReturnString);

LpszReturnString: Тази опция ще използва променлива sbReturn: масив [1..64] на знак;

Това е време да отидете до най-важният параметър на функцията - lpszCommand. Този екип е направено с помощта на специални оператори, някои от които са разгледани по-късно.

отворено
Тази команда се поддържа от всички устройства. Той се използва за инициализиране на устройството. Синтаксисът на командата е:
"Open lpszDeviceID lpszOpenFlags lpszFlags"
Опции:
LpszDeviceID - идентификатор на едно от устройствата (или неговия псевдоним), посочени в раздел [MCI] System.ini файл или в системния регистър. Тя може също да покаже на водача. Например: cdaudio, секвенатор, waveaudio, MyDriver.drv.
LpszOpenFlags - флаг за определяне на допълнителни параметри, за да се инициализира. Аз няма да дам целия списък от стойности на този параметър за всяко устройство, и спомена само стойността на "псевдоним тип device_alias DEVICE_TYPE", който се отваря DEVICE_TYPE на тип устройство под device_alias псевдонима.
LpszFlags - може да приеме една от следните стойности:

  1. Тест - използва за определяне на възможността на екипа, както и на самия отбор не се изпраща към устройството.
  2. Изчакайте - знамето на контрола на програмата се прехвърля само след командата.
  3. Уведоми - знамето на програмата ще получите специално послание с помощта на който могат да открият завършването на командването и управлението ще бъдат предадени незабавно.

например:
mciSendString ( "отворен D: \ Sound.wav тип waveaudio псевдоним MyWave изчакване", нула, 0, 0); - свързва устройството под псевдонима WaveAudio MyWave с файл г: \ Sound.wav.

играя
Тази команда започва да свири на един от следните устройства: CD аудио, цифрово видео, MIDI секвенсер, видеодиск, VCR и форма на сигнала-аудио.
Синтаксисът на командата е:
"Играй lpszDeviceID lpszPlayFlags lpszFlags"
Опции:

  • LpszDeviceID - идентификатор на едно от устройствата (или неговия псевдоним), посочени в раздел [MCI] System.ini файл. Например: cdaudio, секвенатор, waveaudio, avivideo.
  • LpszPlayFlags - знаме, което идентифицира типа на апарата за възпроизвеждане. Таблица 1 е даден списък на стойностите на този параметър за всяко устройство, и Таблица 2 показва обяснение за тези стойности.

например:
mciSendString ( "атака cdaudio" нула, 0, 0); - музика CD, се пуска от началото или, или от мястото, фиксирана команда "пауза".

Статус
Тази команда се използва за определяне на различните параметри. Много настройки, така че всички от тях няма да се откаже. Аз се съсредоточи само върху екипите за музикални CD-та.

  • cdaudio тип номер на запис - за да се определи вида на номера на песента с броя
  • песента - за определяне на дължината номер на текущата песен - за определяне диск на брой дължина дължина писта - за определяне на състава на дължина с номер брой носители, присъстваща - за определяне на присъствието на диск в режим на CD-ROM - за определяне на състоянието на възпроизвеждане: условия, спря, пауза, отворен , не е готов, паркиран, запис или търсят.
  • брой песни - за определяне на броя на песни от позицията на диск - за определяне на текущата позиция на номера на песента позиция диск - за определяне на първоначалното положение на номера на песента с броя готов - връща истина, ако апаратът може да приеме други команди начална позиция - в изходно положение на диска
  • време формат - часови формат, използван в тази сесия с устройството.

С това завършва теорията и преминете към практиката. Нека да пишат с помощта на инструмент mciSendString играч на музикални CD-та. Разбира се, ние не смята всички команди, които трябва, но мисля, че проблемите няма да възникнат, защото други команди са сравнително лесни за употреба.
Създаване на нов проект в Делфи и донесе формата в желаната форма (вж. Фигура 1).

За тази цел са необходими следните компоненти: TLabel (5 броя), TButton (7 броя), TListBox, TTrackBar и TTimer. Към списъка с модули, добавки MMSystem. Сега декларират две глобални променливи:
Var
sbReturn: масив [1..64] на знак; // стойности връщане
COM: pchar; // изпраща команда

След това можете да напишете функции за управление на възпроизвеждането:
// премине към пистата с номер Track
процедура gototrack (Track: число);
Var
COM: pchar;
започвам
// Задаване на формат на времето в "Track: минути: секунди: Рамки"
COM: = "настроен cdaudio време формат tmsf";
mciSendString (царевично, @sbReturn, 64, 0);
// започнете да играете песни Track
COM: = pchar ( "играе cdaudio от" + inttostr (Track));
mciSendString (царевично, @sbReturn, 64, 0);
// Задаване на формат на времето в милисекунди
COM: = 'определени мс формат cdaudio време ";
mciSendString (царевично, @sbReturn, 64, 0);
приключи;

// преход към следващата песен
процедура NextTrack;
Var
тек: цяло число;
започвам
CUR: = GetCurrentTrack;
// ако текущата песен - последната, след това отидете на първата
ако (тек <>след това
GoToTrack (тек + 1)
още
GoToTrack (1);
приключи;

// връща на предишната песен
процедура PrevTrack;
Var
тек: цяло число;
започвам
CUR: = getcurrentTrack;
ако (тек> 1), след това
GoToTrack (тек-1)
// ако сегашният състав - на първо място, след това преминете към финала
още
GoToTrack (GetTracksCnt);
приключи;

// Дължина на състава
функция GetTrackLength (Track: число): низ;
започвам
COM: = pchar ( "статут cdaudio с дължина на пистата" + inttostr (Track) "чакам" +);
mciSendString (царевично, @sbReturn, 64, 0);
резултат: = подреден (sbReturn);
приключи;

// дължина диск
функция GetCDLength: низ;
започвам
COM: = pchar ( "статут cdaudio дължина изчакване");
mciSendString (царевично, @sbReturn, 64, 0);
резултат: = подреден (sbReturn);
приключи;

// състояние възпроизвеждане
функционира GetStatus: низ;
започвам
COM: = "статут cdaudio режим на изчакване";
mciSendString (царевично, @sbReturn, 64, 0);
резултат: = подреден (sbReturn);
приключи;

// ако има диск
функция IsCDReady: низ;
започвам
COM: "статут cdaudio готов чакане" =;
mciSendString (царевично, @sbReturn, 64, 0);
резултат: = подреден (sbReturn);
приключи;

// спра да играя
процедура StopCD;
започвам
mciSendString ( "спре cdaudio чака", @sbReturn, 64, 0);
приключи;

// началните състави позиция
функционални GetTrackPos (Track: дума): низ;
започвам
COM: = pchar ( "статут cdaudio позиция писта" + inttostr (Track) "чакам" +);
mciSendString (царевично, @sbReturn, 64, 0);
резултат: = подреден (sbReturn);
приключи;

// текущата позиция диск
функционални GetCDPos: низ;
започвам
COM: = pchar ( "статут cdaudio позиция на изчакване");
mciSendString (царевично, @sbReturn, 64, 0);
резултат: = подреден (sbReturn);
приключи;

Сега пиша товарачи за различните събития на компонентите:
// инициализиране на устройството по време на зареждане
процедура TForm1.FormCreate (Sender: TObject);
започвам
mciSendString ( "отворено cdaudio ', @sbReturn, 64, 0);
приключи;

// изход затварящо устройство
процедура TForm1.FormDestroy (Sender: TObject);
започвам
mciSendString ( "близо cdaudio изчакване", @sbReturn, 64, 0);
приключи;

// Next бутон (до музика)
процедура TForm1.Button4Click (Sender: TObject);
започвам
NextTrack;
приключи;

// бутон Предишна (Отива на предишната песен)
процедура TForm1.Button5Click (Sender: TObject);
започвам
PrevTrack;
приключи;

// процедура за таймера, повтаряща се всяка секунда
процедура TForm1.Timer1Timer (Sender: TObject);
Var
псе, аз: дума;
во: низ;
CNT: байт;
час: дума;
мин, сек: байт;
т: цяло число;
започвам
// показване на текущото състояние
"Състояние: '=: label5.Caption + GetStatus;
ако (GetStatus <>"Playing") и
(GetStatus<>"Спряно") и
(GetStatus<>"Пауза") след излизане;
// Задаване на формат на времето в милисекунди
COM: = 'определени мс формат cdaudio време за изчакване;
mciSendString (царевично, @sbReturn, 64, 0);
CUR: = GetCurrentTrack;
// изберете текущия списък песен
ListBox1.ItemIndex: = тек-1;

COM: "статут cdaudio чакане формат време" =;
mciSendString (царевично, @sbReturn, 64, 0);
// информация информационен дисплей
label2.Caption: = 'Time Format: "+ отрежете (sbReturn);
label3.Caption: = "начална позиция: '+ GetTrackPos (тек);
label4.Caption: = "Настоящата позиция е:" + GetCDPos;

TrackBar1.Max: = strtoint (GetTrackLength (тек)) DIV 1000;
т: = strtoint (GetCDPos) -strtoint (GetTrackPos (тек));
т: т = DIV 1000;
TrackBar1.Position: = Т;
час: = т DIV 3600;
т: т = мод 3600;
мин: = т DIV 60;
т: т = мод 60;
сек: = Т;
во: = формат ( ": .. ', [мин, сек]);
ако (час> 0), тогава
во: = inttostr (час) + ':' + ва;
// дисплей по време на възпроизвеждане на текущата песен
label1.Caption: = ва;
приключи;

// когато кликнете два пъти върху песента от списъка започне възпроизвеждането
процедура TForm1.ListBox1DblClick (Sender: TObject);
започвам
GoToTrack (ListBox1.ItemIndex + 1);
приключи;

// назад състав за 5 секунди напред
процедура TForm1.Button6Click (Sender: TObject);
Var
т: цяло число;
започвам
т: = strtoint (GetCDPos) 5000;
StopCD;
COM: = pchar ( "търси cdaudio до" + inttostr (т) "чака" +);
mciSendString (царевично, @sbReturn, 64, 0);
PlayCD;
приключи;

// назад състав за 5 секунди преди
процедура TForm1.Button7Click (Sender: TObject);
Var
т: цяло число;
започвам
т: = strtoint (GetCDPos) -5,000;
StopCD;
COM: = pchar ( "търси cdaudio до" + inttostr (т) "чака" +);
mciSendString (царевично, @sbReturn, 64, 0);
PlayCD;
приключи;

Здравейте Благодаря Ви много. Пиша само чрез разглеждане на статията (или по-скоро самото копиране за по-нататъшно четене =)), но дори и на пръв поглед, много информативна и чете! (Особено, ако Алексей Rodionov пише, че "Супер!", Аз просто го обичам))))
Аз просто пиша за обработка на курсовата работа zvuka.Spasibo страхотно.

DirectX не искате да използвате (все още).

Освен Намерено общо описание на mciSendString, но нямаше ясно без примери:

Благодаря отново! Тогава той

Голям отбор и един пример за шик. Може би някой друг ще каже дали е възможно да промените силата на звука на възпроизвеждания звук. Самият аз съм нещо не е намерен.

Грешка MCI устройство не е намерено, когато играят WAV файл
Вие по някакъв начин да го оправя?

Подкрепете проекта - споделете линка, благодаря!