Подготавливаем Вам новую Нашу программу "Баловос"

Компьютеры, программы, периферия, коммуникации, интернет, программирование и т.п. Ранее назывался Hard-n-Soft.
Сообщение
Автор
Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 0 Сообщение Wiz » 05 апр 2015 17:47

Здравствуйте, уважаемые участники!

Наша Команда в настоящее время подготавливает к представлению Вам новой разрабатываемой Нами программой, под именем "Баловос", хотя она скорее не новая, а хорошо забытая старая, а новое - это скорее интерфейс.

Что делает программа "Баловос" ?

Программа "Баловос" позволяет рентранслировать записываемый звуковой поток с устройства записи на устройство воспроизведения, позволяя при этом, первая функция, при необходимости уменьшить скорость воспроизводимого потока относительно скорости записи с устройства (функция - изменить питч) и, вторая функция - сделать определенную задержку между записываемым и воспроизоводимом потоке (функция - эхо)

Изображение

С самыми наилучшеми пожеланиями, обращаемся к Вам, чтобы Вы внесли в проект долю участия.

Спасибо за участие в проекте, с уважением, Команда разработчиков.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 1 Сообщение Wiz » 05 апр 2015 20:12

Уважаемые Участники !

Представляем Вам Нашу новую программу "Баловос".

Теперь Вы можете скачать пробную версию Нашей программы.
balovos_release.rar
С уважением, Команда Разработчиков.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 2 Сообщение Wiz » 05 апр 2015 23:15

Уважаемые Участники!

Скачивайте программу и предлагайте дополнения.

Desperanto
Аватара пользователя
Благодарил (а): 106 раз
Поблагодарили: 65 раз

№ 3 Сообщение Desperanto » 06 апр 2015 09:19

антивирус ругается...говорит там вирус...

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 4 Сообщение Wiz » 06 апр 2015 13:05

Уважаемые Участники !

В программе нет вирусов, что подтверждается сервисом https://www.virustotal.com/ru

File identification
MD5 ac20aa913f32fb50993b6b24eaf17f45
SHA1 925769a81e81d8136c182741f8c9376d7e3f0e3c
SHA256 db8444d399d677033e7c7012c804612320896598f45df5648976935f08c8df7d
ssdeep
384:A1QEpkW+fsjMJBWnJQLICcfEpBIduyklqsQCnl2c5i5DjR+QaVD1HbOpzhDK:A160MCQLgullqslnl2c5iRnaVD1Hai

Размер файла 19.5 KБ ( 20003 bytes )
Тип файла RAR
Описание
RAR archive data, v1d, os: Win32

TrID RAR Archive (83.3%)
REALbasic Project (16.6%)
Tags
rar

VirusTotal metadata
First submission 2015-04-06 08:39:27 UTC (1 час, 23 минут назад)
Last submission 2015-04-06 08:39:27 UTC (1 час, 23 минут назад)
Имена файлов balovos_release.rar
Advanced heuristic and reputation engines
Symantec reputation Suspicious.Insight
ExifTool file metadata
MIMEType
application/x-rar-compressed

ModifyDate
2015:04:05 18:23:01

FileType
RAR

PackingMethod
Normal

CompressedSize
19965

OperatingSystem
Win32

ArchivedFileName
balovos_release.exe

UncompressedSize
45056



VirusTotal
SHA256: db8444d399d677033e7c7012c804612320896598f45df5648976935f08c8df7d
Имя файла: balovos_release.rar
Показатель выявления: 0 / 57
Дата анализа: 2015-04-06 08:39:27 UTC (1 час, 25 минут назад)
0
0

Анализ
Дополнительные сведения
Комментарии 0
Голосование

Антивирус Результат Дата обновления
ALYac 20150406
AVG 20150406
AVware 20150406
Ad-Aware 20150406
AegisLab 20150406
Agnitum 20150405
AhnLab-V3 20150405
Alibaba 20150406
Antiy-AVL 20150405
Avast 20150406
Avira 20150405
Baidu-International 20150406
BitDefender 20150406
Bkav 20150404
ByteHero 20150406
CAT-QuickHeal 20150406
CMC 20150403
ClamAV 20150406
Comodo 20150406
Cyren 20150406
DrWeb 20150406
ESET-NOD32 20150406
Emsisoft 20150406
F-Prot 20150406
F-Secure 20150405
Fortinet 20150406
GData 20150406
Ikarus 20150406
Jiangmin 20150405
K7AntiVirus 20150406
K7GW 20150406
Kaspersky 20150406
Kingsoft 20150406
Malwarebytes 20150406
McAfee 20150406
McAfee-GW-Edition 20150405
MicroWorld-eScan 20150406
Microsoft 20150406
NANO-Antivirus 20150406
Norman 20150406
Panda 20150406
Qihoo-360 20150406
Rising 20150405
SUPERAntiSpyware 20150405
Sophos 20150406
Symantec 20150406
Tencent 20150406
TheHacker 20150406
TotalDefense 20150405
TrendMicro 20150406
TrendMicro-HouseCall 20150406
VBA32 20150403
VIPRE 20150406
ViRobot 20150406
Zillya 20150405
Zoner 20150403
nProtect 20150404

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 5 Сообщение Wiz » 06 апр 2015 13:08

Уважаемые Участники !

Скачивайте программу "Баловос" и предлагайте свои дополнения !

Спасибо за участие в проекте !

С уважением, Наша Команда .

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 6 Сообщение Wiz » 06 апр 2015 14:04

Скачивайте Нашу программу "Баловос" и предлагайте Ваши решения и дополнения, уважаемые Участники !

Спасибо за участие в проекте. С уважением, Разработчики !

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 7 Сообщение Wiz » 06 апр 2015 14:29

Уважаемые Участники !

Предлагаю Всем Вам приступить к следующей стадии реализации Нашего проекта.

Давайте попробуем вместе с Вам разобраться, как же работает эта Наша программа.
Из каких она состоит частей ?
Какие использует функции и возможности операционной системы.
Каким образом и для чего Наша программа "Баловос" записывает звук с микрофона Вашего Персонального компьютера.
Каким образом Наша программа воспроизводит ранее записанный звук.
Как изменяется частота дискретизации при использовании функции понижения питча и мн. других вопросов.

Итак, вооружимся прежде всего терпением, под рукой должна быть ЭВМ с установленной ОС Windows XP (2003 г. издание),
с установленной средой разработки Visual Studio 2006 и электронной справкой MSDN.

Давайте для начало внимательно рассмотрим диалоговое окно программы.

Изображение

Что Мы можем созерцать на данном представлении интерфейса программы ?

Desperanto
Аватара пользователя
Благодарил (а): 106 раз
Поблагодарили: 65 раз

№ 8 Сообщение Desperanto » 06 апр 2015 15:37

не открывается архив, блокируется антивирусом!!!!

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 9 Сообщение Wiz » 06 апр 2015 19:25

Здравствуйте, Уважаемые Участники ! (далее по тексту - УУ - примечание автора)

Рассмотрим внимательно тело программы: точнее так скажу - всё тело приводить не буду, ограничимся определенной частью.

Код: Выделить всё

/*
Программа осуществляет замедление или убыстрение голоса
в реальном масштабе времени.
Работает только на дуплексных Sound картах
*/

#include <windows.h>
#include <stdlib.h>
#include <fstream.h>
#include <math.h>
#include <commctrl.h>

//nclude "BALOVOS.rh"
#include "resource.h"	

HWND hdlg;
HWAVEOUT waveOut;
HWAVEIN waveIn;


void DrawOscilog(HWND hdlg, short * sound, int size, int id);

int PlayCount=0;
int RecordCount=0;
int N_CHANNELS=1;
int BITS_PER_SAMPLE=16;
int silence=0;

#define bufcount 20
const RECBUFLEN=1000;

int samplerate;

float ugol=0;
int old_tempo;

void Mes(char *a)
{
	MessageBox(hdlg, a, "Сообщение", MB_OK | MB_ICONINFORMATION);
}

//устанавливает числовое значение, находящеесе в элементе формы idc
int SetNumber(int idc, int num)
{
	char buf[50];
	itoa(num,buf,10);
	SetDlgItemText(hdlg, idc, buf);
	return 0;
}


int InStop=TRUE,OutStop=TRUE;
int BlockOut=0;

int BlockPrepareIn=0;


//адреса данных для записи


WORD * buf[bufcount];
WAVEHDR HdrIn[bufcount];

//int playpos;	//определяет место, куда будет переписана
				//из буфера записи в буфер проигрыавания
				//очередная порция данных

int PlayStart=FALSE;

int recbuflen;


void Disable(int ID)
{
	HWND hwnd=GetDlgItem(hdlg, ID);
	EnableWindow(hwnd, FALSE);

}

void List(char *s)
{
	HWND hl=GetDlgItem(hdlg, IDC_LIST);
	char str[16384];
	strcpy(str,s);

	SendMessage(hl, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) str);
}


int AddBuffer(WAVEHDR * hdr)
{
	if (waveInPrepareHeader(waveIn, hdr,
		sizeof(WAVEHDR)))
	{
		List("AddBuffer: Ошибка при вызове функции waveInPrepareHeader");
		return FALSE;
	}

	BlockPrepareIn++;

	if (waveInAddBuffer(waveIn, hdr, sizeof(WAVEHDR)))
	{
		List("AddBuffer: Ошибка при вызове функции waveInAddBuffer");
		return FALSE;
	}

	return TRUE;

}

void OnTimer()
{
		if (InStop) return;

			//получаем позиции проигрывания и записи
			MMTIME info={0};
			info.wType=TIME_BYTES;

			waveInGetPosition(waveIn, &info, sizeof(info));
			ULONG recpos=info.u.cb %recbuflen;	//позиция записи

			waveOutGetPosition(waveOut, &info, sizeof(info));
			ULONG playpos=info.u.cb %recbuflen;

			SetNumber(IDC_POS, PlayCount);
			SetNumber(IDC_POS2, 1000*(RecordCount-PlayCount)/samplerate);
			SetNumber(IDC_POS3, RecordCount);

			HBRUSH RED=CreateSolidBrush(RGB(255,0,0));
			HBRUSH GREEN=CreateSolidBrush( RGB(0,255,0));

			int r1=recpos/900, r2=playpos/900;

			RECT rectRED={ r1,0, r1+5, 20};
			RECT rectGREEN={ r2,0, r2+5, 20};

			HDC hdc=GetDC(hdlg);

			RECT rectALL={ 0,0, 900, 20};
			FillRect(hdc, &rectALL, 0);
			FillRect(hdc, &rectRED, RED);
			FillRect(hdc, &rectGREEN, GREEN);

			DeleteObject(RED);
			DeleteObject(GREEN);

			ReleaseDC(hdlg,hdc);

			return;
}

//возвращает ошибку в текстовом виде
void MMTextErrorIn(int wError)
{
	char buf[1024];
	waveInGetErrorText(wError, buf, 1024);
	List(buf);
}

void Enable(int ID)
{
	HWND hwnd=GetDlgItem(hdlg, ID);
	EnableWindow(hwnd, TRUE);
}

//возвращает числовое значение, находящеесе в элементе формы idc
int GetNumber(int idc)
{
	char buf[10];
	GetDlgItemText(hdlg, idc, buf, 9);
	return atoi(buf);
}



void OnIDC_STOP()
{
	PlayStart=FALSE;

	if (!OutStop)
	{
		if(waveOutReset(waveOut))
		{
			Mes("OnIDC_STOP: ошибка функции waveOutReset");
			return;
		}
		OutStop=TRUE;
	}

	if (!InStop)
	{

		if(waveInReset(waveIn))
		{
			Mes("OnIDC_STOP: ошибка функции waveInReset");
			return;
		}
		InStop=TRUE;
	}

	Enable(IDC_START);
	Disable(IDC_STOP);
	Disable(IDC_RESET);
	Enable(IDC_TEMPO);
}

int InitRecordDevice()
{
	recbuflen=GetNumber(IDC_RECBUFLEN);
	if (recbuflen>1000000 || recbuflen<1)
	{
		Mes("Значение поля Buffer Len \n"
		"должно быть в пределах 1..1000000 \n");
		return FALSE;
	}

	for(int i=0; i<bufcount; i++)
	{
			buf[i] = new WORD[recbuflen];
			if (!buf[i])
			{
				List("Не могу выделить память для звуковых данных");
				return FALSE;
			}
	}

	samplerate=GetNumber(IDC_SAMPLERATE);
	if ( samplerate <1 || samplerate > 256000 )
	{
		Mes("Значение поля Sample Rate \n"
		"должно быть в пределах\n"
	"1 ... 256000");
		return FALSE;
	}

	WAVEFORMATEX p;

	p.wFormatTag=WAVE_FORMAT_PCM;
	p.nChannels=N_CHANNELS;
	p.nSamplesPerSec=GetNumber(IDC_SAMPLERATE);
	p.nAvgBytesPerSec=p.nSamplesPerSec;
	p.nBlockAlign=2;
	p.wBitsPerSample=BITS_PER_SAMPLE;

	if (waveInOpen(
						&waveIn,
						WAVE_MAPPER,
						&p,
						DWORD(hdlg),
						0,
						CALLBACK_WINDOW
						)
		)
	{
		List("Не могу открыть записывающее устройство");
		return FALSE;
	}

	List("InitRecordDevice: ok");
	return TRUE;
}



Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 10 Сообщение Wiz » 07 апр 2015 10:41

Здравствуйте, дорогие УУ !

Итак, приступим теперь к следующей Нашей с Вами части тела программы. На этот раз мы посмотрим на функции int Record() от кнопки "Рекорд",int InitPlayDevice(), int Play(WORD *address, int size),

Код: Выделить всё

int Record()
{
	for(int i=0; i<bufcount; i++)
	{
		memset(&HdrIn[i], 0, sizeof(WAVEHDR));
		HdrIn[i].lpData=(char*)buf[i];
		HdrIn[i].dwBufferLength=recbuflen;
		if (!AddBuffer(&HdrIn[i])) return FALSE;
	}

	if (waveInStart(waveIn))
	{
		List("Record: Ошибка при попытке записи звука (функция waveInStart)");
		return FALSE;
	}

	return TRUE;
}


int InitPlayDevice()
{
	samplerate=GetNumber(IDC_SAMPLERATE);

	WAVEFORMATEX p;

	p.wFormatTag=WAVE_FORMAT_PCM;
	p.nChannels=N_CHANNELS;
	p.nSamplesPerSec=samplerate;
	p.nAvgBytesPerSec=p.nSamplesPerSec;
	p.nBlockAlign=2;
	p.wBitsPerSample=BITS_PER_SAMPLE;

	if (waveOutOpen(&waveOut,
						WAVE_MAPPER,
						&p,
						DWORD(hdlg),
						0, CALLBACK_WINDOW)
		)
	{
		Mes("Не могу открыть проигрывающее устройство");
		return FALSE;
	}

	List("InitPlayDevice: ok");
	return TRUE;
}
//Возвращаемое значение:
//TRUE - Ok
//FALSE - ошибка
int Play(WORD *address, int size)
{
	
	WAVEHDR * HdrOut=new WAVEHDR;

	HdrOut->lpData=(char*)address;
	HdrOut->dwBufferLength=size*2;
	HdrOut->dwLoops=0;
	HdrOut->dwFlags=0;
	//HdrOut0.dwFlags=0;//WHDR_BEGINLOOP | WHDR_ENDLOOP;
	HdrOut->reserved=0;

	if(waveOutPrepareHeader(waveOut, HdrOut,
		sizeof(WAVEHDR)))
	{
		Mes("Ошибка при вызове функции waveOutPrepareHeader");
		return 0;
	}

	//начинаем проигрывать сначала
	if(waveOutWrite(waveOut, HdrOut, sizeof(WAVEHDR)))
	{
		List("Ошибка при вызове функции waveOutWrite");
		return FALSE;
	}

	//List("waveOutWrite: ok");

	BlockOut++;

	PlayCount+=size;

	return TRUE;
}

и посмотрим на некоторые Наши переменные, это K_ARU ("КА_АРУ"), K_ARU_STEP_PLUS ("КА_АРУ_СТЕП_ПЛЮС"), K_ARU_STEP_MINUS ("КА_АРУ_СТЕП_МИНУС") , K_ARU_MAX ("КА_АРУ_МАКС") и смещение постоянного тока CONST_CURRENT ("КОНСТ_КАРРЕНТ");

Код: Выделить всё

double K_ARU=1, K_ARU_STEP_PLUS=0.05, K_ARU_STEP_MINUS=1, K_ARU_MAX=1;

//очень важный параметр, особенно при сильном усилении
int CONST_CURRENT=1535;	//смещение постоянного тока



Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 11 Сообщение Wiz » 07 апр 2015 12:02

Итак, УУ, начнем совместно рассматривать функцию тела программы int Record()

В начале приведем полностью исходный код функции тела:

Код: Выделить всё

int Record()
{
   for(int i=0; i<bufcount; i++)
   {
      memset(&HdrIn[i], 0, sizeof(WAVEHDR));
      HdrIn[i].lpData=(char*)buf[i];
      HdrIn[i].dwBufferLength=recbuflen;
      if (!AddBuffer(&HdrIn[i])) return FALSE;
   }

   if (waveInStart(waveIn))
   {
      List("Record: Ошибка при попытке записи звука (функция waveInStart)");
      return FALSE;
   }

   return TRUE;
}
Как видно из приведенного выше текста программы, здесь Мы организуем цикл, в котором последовательно добавляются буфера оперативной памяти в очередь на запись с устройства. Здесь Нами так же стоит отметить, что в применяемой стандартной технологии записи звука на платформе ПК Windows, для успешной непрерывной записи звукового потока требуется использовать не менее двух буферов оперативной памяти, поскольку при использовании только одного буфера памяти часть записываемых данных будет утеряна, поскольку после того, как буфер будет записан, программе придет сообщения от ОС, что запись успешно состоялась. Пока происходит копирование записанных данных в Наш буфер, и передача этого же буфера обратно на запись, часть данных, записываемых с микрофона звуковой карты будет утеряна. Поэтому используется простая технология использования двух и более небольших (500-2000 байт) буферов данных, при которых после записи одного блока звуковых данных в буфер, системе сразу же будет доступен уже другой буфер данных, и поэтому потери данных можно будет избежать.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 12 Сообщение Wiz » 07 апр 2015 18:06

Здравствуйте, дорогие УУ !

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 13 Сообщение Wiz » 07 апр 2015 19:37

Итак, уважаемые УУ !

Теперь внимательно присмотримся к структуре под именем WAVEHDR, используемой в функции записи int Record()

Вот, что про нее говорит MSDN:

The WAVEHDR structure defines the header used to identify a waveform-audio buffer.
Зэ вафхеадер стракча дефайнс тзе хеадер юзед то идентифи э вафформ-аудио буффер.
Структура WAVEHDR определяет заголовок, используемый вафформ аудио буфером.

typedef struct {
LPSTR lpData;
DWORD dwBufferLength;
DWORD dwBytesRecorded;
DWORD dwUser;
DWORD dwFlags;
DWORD dwLoops;
struct wavehdr_tag * lpNext;
DWORD reserved;
} WAVEHDR;

Members
Мемберс
Участники

lpData
лпДата

Pointer to the waveform buffer.
Поинтер то тхе вафформ буффер.
Указатель на буфер вафформ.

dwBufferLength
дфБуфферЛенгтх

Length, in bytes, of the buffer.
Ленгтх, ин байтес, оф тхе буффер.
Длина, в байтах, буфера.

dwBytesRecorded
двБайтесРекордед

When the header is used in input, this member specifies how much data is in the buffer.
dwUser

Вен тхе хеадэр из юзед ин инпут, зис мембер специфис хау мач дата из ин зэ буффер.
Когда заголовок используется в вводе, этот участник задает как много данных будет в буфере.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 14 Сообщение Wiz » 07 апр 2015 23:37


dwUser
дэвэЮзер

User data.
Юзер дата

dwFlags
дэвэФлагс

Flags supplying information about the buffer. The following values are defined:
Флагс суплинг информатион эбаут тхе буффер. Зэ фоллоуинг валуэс арэ дефайнед:
Флаги суплиинг информацию о буфере. Следующие значения определены:



revik
Благодарил (а): 2 раза
Поблагодарили: 51 раз

№ 15 Сообщение revik » 08 апр 2015 04:01

[Смотрит на листинги]
Б0уэх, как будто призрак 1998 года посетил меня только что.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 16 Сообщение Wiz » 08 апр 2015 08:14

15: revik:

?

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 17 Сообщение Wiz » 08 апр 2015 08:52

15: revik пишет:
> [Смотрит на листинги]
> Б0уэх, как будто призрак 1998 года посетил меня только что.

?

Уважаемый УУ ! Поподробнее высскажитесь !

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 18 Сообщение Wiz » 08 апр 2015 10:17

Продолжаем рассматривать структуру WAVEHDR

Код: Выделить всё

typedef struct { 
LPSTR lpData; 
DWORD dwBufferLength; 
DWORD dwBytesRecorded; 
DWORD dwUser; 
DWORD dwFlags; 
DWORD dwLoops; 
struct wavehdr_tag * lpNext; 
DWORD reserved; 
} WAVEHDR; 
dwFlags
Flags supplying information about the buffer. The following values are defined:
Флаги суплинг информацию о буфере. Следующие значения определены:

WHDR_BEGINLOOP
This buffer is the first buffer in a loop.
Этот буфер есть первый буфер в петле.

This flag is used only with output buffers.
Этот флаг используется только с выходными буферами.

WHDR_DONE
Set by the device driver to indicate that it is finished with the buffer and is returning it to the application.
Устанавливается драйвером устройства, индицирующем, что этот буфер финиширован и он возвращается в приложение.

WHDR_ENDLOOP
This buffer is the last buffer in a loop. This flag is used only with output buffers.
Этот буфер есть последний буфер в петле. Этот флаг используется только с аутпут буферами.

WHDR_INQUEUE
Set by Windows to indicate that the buffer is queued for playback.
Устанавливается Окном для индицирования буфера, который подготовлен в очередь для проигрывания

WHDR_PREPARED
Set by Windows to indicate that the buffer has been prepared with the waveInPrepareHeader or waveOutPrepareHeader function.
Устанавливается Окном для индикации, что буфер был подготовлен с waveInPrepareHeader или waveOutPrepareHeader функцией.

dwLoops
Number of times to play the loop. This member is used only with output buffers.
wavehdr_tag
Число времени для проигрывания петли. Этот участник используется только с буферами вывода.

Reserved.
Зарезервировано.

reserved
зарезервировано

Reserved.
Зарезервировано.

Remarks
Ремарки

Use the WHDR_BEGINLOOP and WHDR_ENDLOOP flags in the dwFlags member to specify the beginning and ending data blocks for looping.
Используйте WHDR_BEGINLOOP и WHDR_ENDLOOP флаги в участнике dwFlags для задания начала и конца данных блока для запетливания.

To loop on a single block, specify both flags for the same block.
Петля на одном блоке, задает оба флага для самого блока.

Use the dwLoops member in the WAVEHDR structure for the first block in the loop to specify the number of times to play the loop.
Использование участника dwLoops в структуре WAVEHDR для первого блока и петли для задания номера времени для проигрывания петли.

The lpData, dwBufferLength, and dwFlags members must be set before calling the waveInPrepareHeader
or waveOutPrepareHeader function. (For either function, the dwFlags member must be set to zero.)
Участники lpData, dwBufferLength, и dwFlags должны быть установлены перед вызыванием waveInPrepareHeader и waveOutPrepareHeader функций. (Для иных функций, участник dwFlags должен быть установлен в ноль.


Requirements
Требования

Windows NT/2000: Requires Windows NT 3.1 or later.
Окно NT/2000: Требуется Окно НТ 3.1 или выше.

Windows 95/98: Requires Windows 95 or later.
Окно 95/98: Требуется Окно 95 или позже.

Header: Declared in Mmsystem.h.
Заголовок: Объявлен в файле "Mmsystem.h"

See Also
Смотри Также

Waveform Audio Overview, Waveform Structures, waveInPrepareHeader, waveOutPrepareHeader

Platform SDK Release: February 2001 Contact Platform SDK Order a Platform SDK CD Online
Платформ СДК релиз: Февраль 2001 Контакат Платформ СДК Порядок Платформы СДК СИ-ДИ Онлайн

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 19 Сообщение Wiz » 08 апр 2015 13:05

Рассмотрим внимательно функцию тела Нашей программы int InitPlayDevice()

Код: Выделить всё

int InitPlayDevice()
{
   samplerate=GetNumber(IDC_SAMPLERATE);

   WAVEFORMATEX p;

   p.wFormatTag=WAVE_FORMAT_PCM;
   p.nChannels=N_CHANNELS;
   p.nSamplesPerSec=samplerate;
   p.nAvgBytesPerSec=p.nSamplesPerSec;
   p.nBlockAlign=2;
   p.wBitsPerSample=BITS_PER_SAMPLE;

   if (waveOutOpen(&waveOut,
                  WAVE_MAPPER,
                  &p,
                  DWORD(hdlg),
                  0, CALLBACK_WINDOW)
      )
   {
      Mes("Не могу открыть проигрывающее устройство");
      return FALSE;
   }

   List("InitPlayDevice: ok");
   return TRUE;
}
Чтобы разобраться в функции int InitPlayDevice(), для начала Нам надо будет также разобраться в структуре WAVEFORMATEX.

Посмотрим внимательно на структуру WAVEFORMATEX, что по этому поводу скажет Всем Нам MSDN.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 20 Сообщение Wiz » 08 апр 2015 15:11

Теперь приступим к внимательному осмотру структуры WAVAFORMATEX от Корпорации Микрософт.

Вот что Всем Нам говорит MSDN по поводу структуры WAVEFORMATEX

WAVEFORMATEX
ВАФФОРМАТЭКСЭ

The WAVEFORMATEX structure defines the format of waveform-audio data.

Зэ ВАФФОРМАТЭКСЭ стракча дефайнес тхе формат оф вафформа-аудио дата.

Структура WAVEFORMATEX определяет формат вафформ аудио данных.

Only format information common to all waveform-audio data formats is included in this structure.
Онли формат информэйшн камон то ол вафформ-аудио дата форматс из инклюдед ин тхиз стракча.

Только информация формата общая для всех вафформ-аудио данных форматов, включенна в структуру.

For formats that require additional information, this structure is included as the first member in another structure, along with the additional information.

Фор форматс зэт рекьюю аддитионал информацион, зис стракча из инклюдед ас зэ фирст мембер ин анозер стракча, алонг витхс тхе аддишинал информашн.

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

typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;

Members
Участники

wFormatTag
вФорматТаг

Waveform-audio format type.
Вафформат-аудио формат тупе.


Format tags are registered with Microsoft Corporation for many compression algorithms.
Формат тагс а регистред витх Микрософт Корпарации фор мани компрессион алгоритмс

A complete list of format tags can be found in the MMREG.H header file.

nChannels

Number of channels in the waveform-audio data. Monaural data uses one channel and stereo data uses two channels.

nSamplesPerSec

Sample rate, in samples per second (hertz), that each channel should be played or recorded. If wFormatTag is WAVE_FORMAT_PCM, then common values for nSamplesPerSec are 8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz. For non-PCM formats, this member must be computed according to the manufacturer's specification of the format tag.

nAvgBytesPerSec

Required average data-transfer rate, in bytes per second, for the format tag. If wFormatTag is WAVE_FORMAT_PCM, nAvgBytesPerSec should be equal to the product of nSamplesPerSec and nBlockAlign. For non-PCM formats, this member must be computed according to the manufacturer's specification of the format tag.
Playback and record software can estimate buffer sizes by using the nAvgBytesPerSec member.

nBlockAlign

Block alignment, in bytes. The block alignment is the minimum atomic unit of data for the wFormatTag format type. If wFormatTag is WAVE_FORMAT_PCM, nBlockAlign should be equal to the product of nChannels and wBitsPerSample divided by 8 (bits per byte). For non-PCM formats, this member must be computed according to the manufacturer's specification of the format tag.
Playback and record software must process a multiple of nBlockAlign bytes of data at a time. Data written and read from a device must always start at the beginning of a block. For example, it is illegal to start playback of PCM data in the middle of a sample (that is, on a non-block-aligned boundary).

wBitsPerSample

Bits per sample for the wFormatTag format type. If wFormatTag is WAVE_FORMAT_PCM, then wBitsPerSample should be equal to 8 or 16. For non-PCM formats, this member must be set according to the manufacturer's specification of the format tag. Note that some compression schemes cannot define a value for wBitsPerSample, so this member can be zero.
cbSize

Size, in bytes, of extra format information appended to the end of the WAVEFORMATEX structure. This information can be used by non-PCM formats to store extra attributes for the wFormatTag. If no extra information is required by the wFormatTag, this member must be set to zero. Note that for WAVE_FORMAT_PCM formats (and only WAVE_FORMAT_PCM formats), this member is ignored.

Remarks

An example of a format that uses extra information is the Microsoft Adaptive Delta Pulse Code Modulation (MS-ADPCM) format. The wFormatTag for MS-ADPCM is WAVE_FORMAT_ADPCM. The cbSize member will typically be set to 32. The extra information stored for WAVE_FORMAT_ADPCM is coefficient pairs required for encoding and decoding the waveform-audio data.

Requirements

Windows NT/2000: Requires Windows NT 3.1 or later.

Windows 95/98: Requires Windows 95 or later.

Header: Declared in Mmreg.h.

See Also
Waveform Audio Overview, Waveform Structures

Platform SDK Release: February 2001 Contact Platform SDK Order a Platform SDK CD Online

koker
Благодарил (а): 1 раз

№ 21 Сообщение koker » 08 апр 2015 15:20

тебе пишут, что АВирус блокирует содержимое архива, а ты знай себе поливаешь тут простыни свои.
и что за команда разработчиков трудится над этим проектом?
вообще актуальность прграммы этой есть? для кого она?

Desperanto
Аватара пользователя
Благодарил (а): 106 раз
Поблагодарили: 65 раз

№ 22 Сообщение Desperanto » 08 апр 2015 15:27

21: koker:
виз и виз

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 23 Сообщение Wiz » 08 апр 2015 16:08

21: koker:

Здравствуйте, уважаемый УУ ! Я не знаю что там Ваш интивирус блокирует, Я сейчас ещё раз специально для Вас, зашел на VirusTotal и проверил - никаких вирусов нет. Тем более откуда там вирус, если Я Вам сразу с конвейера, после компиляции упаковал в RAR архив EXE файл. Потому что EXE файлы не допустимо выкладывать в форум. Может быть, Ваш интивирус так настроен, что срабатывает система безопасности, когда в архиве EXE.

Поэтому, УУ, Я выкладываю отчет сервиса

Изображение

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 24 Сообщение Wiz » 08 апр 2015 16:09

22: Desperanto:

Да, товарищь УУ, Вы несколько правы. Только не виз и виз, а виз и ещё несколько.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 25 Сообщение Wiz » 08 апр 2015 18:15

21: koker пишет:

> тебе пишут, что АВирус блокирует содержимое архива, а ты знай себе поливаешь тут простыни свои.
> и что за команда разработчиков трудится над этим проектом?
> вообще актуальность прграммы этой есть? для кого она?

Здравствуйте, УУ !

Команда Разработчиков пока находится в Моем Лице + те кто помогают мне ментально (внутренне-внешние ментально-аффективные иные Я или Наши сущности). Актуальность программы есть, программа для Разрабочиков систем записи, архивирования аудиоданных. Если Я ещё пока невнятно изъяснялся с Вами, эта Наша программa, находится пока в стадии делания (ваяния по другому). Сделаем программу вместе, уважаемые УУ.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 26 Сообщение Wiz » 06 окт 2015 20:35

Здравствуйте, дорогие друзья. Имеет ли смысл продолжение наших уроков по WinApi, касающихся программированию звука на Windows?

operator_123
Благодарил (а): 439 раз
Поблагодарили: 83 раза

№ 27 Сообщение operator_123 » 07 окт 2015 11:45

Да нах надо. В инете полно всего и в более удобоваримом виде. :kos:

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 28 Сообщение Wiz » 08 окт 2015 10:46

27: operator_123:

Ну может быть, изменить несколько формат подачи материала? На форуме, ведь, присутствуют и новички, не отличающие правой руки от левой.

Wiz
ШИЗО
Благодарил (а): 45 раз
Поблагодарили: 34 раза

№ 29 Сообщение Wiz » 08 окт 2015 11:43

28: Wiz:

Я намечаю некий план, программу, для изучения возможности WinApi работы со звуком и сетью на Виндоус.

1) работа с микшером
2) запись звука
3) передача записи по сети (работа с сокетом, протокол TCP/IP, установка подключения с удаленным компьютером)
4) проблема сжатия звука либо в mp3 либо в GSM формат
5) пример записи с микрофона и передачи звука в реальном времени на удаленный компьютер на примере программы "Морской бой"

Вернуться в «Компьютерный форум»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей