Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2009, 19:34   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
Вопрос Sound в Integer

Возникла проблема. Я хочу всю инфу хранить в одном файле... Причем файл integer типа. Я там и картинки храню, и всю служебную информацию... Теперь возникла проблема всунуть туда как то звук в конец файла... Как это можно сделать, чтобы потом можно было бы его и воспроизвести моей программой? Можно ли звук перевести в Integer а потом его вытащить?

Картинки в файле я так и храню. вначале задаю число которое указывает на количество картинок в файле потом два числа это длинна и ширина а потом просто ряд пикселей. как только заканчиваются пиксели, начинается новая картинка. как все картинки заканчиваются начинается еще какая то служебная информация. Можно ли тоже самое со звуком сделать, так чтобы потом можно было бы просто его прочитать и воспроизвести?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 08.12.2009, 19:37   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...если вы используете только чтение, то зачем "изобретать велосипед" и не хранить все в ресурсах? (в res все что душе угодно можно запихнуть)
зы: обратите внимание на программу Alex Cones
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 08.12.2009 в 19:41.
raxp вне форума Ответить с цитированием
Старый 08.12.2009, 19:45   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Мне не надо ресы... Мне нужно файл! просто у меня надо сначало создавать такой файл а потом его надо читать...две программки Editor и Reader. Одна создает файл а вторая его читает. (можно конечно побайтно капировать в конец файла прямо звуковой файл но мне че то это не нравится)
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 08.12.2009, 19:58   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не используйте типизированный файл.
а смотрите в сторону битовых файлов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.12.2009, 21:02   #5
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

только это и приходит на ум. А с типизированными файлами все таки ни как?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 08.12.2009, 21:04   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Мне не надо ресы... Мне нужно файл! просто у меня надо сначало создавать такой файл а потом его надо читать...две программки Editor и Reader. Одна создает файл а вторая его читает. (можно конечно побайтно капировать в конец файла прямо звуковой файл но мне че то это не нравится)
тогда лучше изначально определить структуру файла, скажем вначале идет 1-хэдер с размерностью этого хедера, в нем - описание кол-ва блоков, их начальными адресами в файле и размерностью (длиной), после него уже сами эти блоки с уже известной размерностью и начальными адресами... по этому принципу можно и читать и писать из/в файл... все данные в бинарном виде.

приведу как пример, чтение из своих архивов:
Код:
// ПАРСЕР ---------------------------------------------------------------------
type

  //FILE STRUCT-
  NameHead=record
   name:array [0..255] of Char; // НАЗВАНИЕ регистрации  //name: string[255];
   BytePosRectList,             // начало item rectlist
   CountRectList,               // к-во   item rectlist
   BytePosTableList,            // начало tablelist
   CountTableList,              // к-во   item tablelist
   BytePosBigData,              // начало bigdata
   CountBigData: Longword;      // к-во   item bigdata
  end;

  RectList=record               // ITEM RectList
   BetaStart,                   // нач.угол сегмента 360/0..16384_0.0219°
   BetaEnd,                     // кон.угол сегмента 360/0..16384_0.0219°
   DStart,                      // нач.сегмента      0..1599_250м
   DEnd: Longword;              // кон.сегмента      0..1599_250м
  end;
  RectList_=record              // пересчитанные
   BetaStart,                   // °
   BetaEnd,                     // °
   DStart,                      // м
   DEnd: real;                  // м
  end;

  TableList=record              // ITEM TableList
   Head0,                       // kod[0..15] id[16..19] kpp[20..21] oborot[22]
   Head1,                       // beta[0..13] cntrot[16..23] rectlistitemindex[24..31]
   Point,                       // bytepos= point*4
   Count: Longword;             // countbyte= count*2
  end;
  TableList_=record             // пересчитанные
   kod,
   id,
   kpp,
   ob: integer;
   beta: double;
   cntrot,
   rlii: integer;
   point,
   count: longword;           //32bit
  end;
  TableBigData=record
   Head0,
   Head1: Longword;
  end;
  CUList_=record             // пересчитанные
   dalnost,
   beta,
   ugmes,
   visota,
   kontrast,
   amp,
   ob: double;
   datetime: string;//tdatetime;
   filtr1,
   filtr2: string;
   x,y: gldouble;
  end;

  TListDAT=record //массив DAT
   rl: array of RectList_;
   tl: array of TableList_;
  end;

  PRL=^RectList;
  PTL=^TableList;
// END ПАРСЕР -----------------------------------------------------------------


procedure tpgl.GetInfoParser_DAT(lib: string); // ПАРСЕР по HEAD/TABLE-
var i,j: integer;
    recl : RectList;
    tabl : TableList;
begin
 fDAT.Free;
 fDAT:= TMemoryStream.Create;
 fDAT.LoadFromFile(lib);

 //============================= NAME REG
 fDAT.Read(head, SIZEOF(head));
 if pos('йцууц',head.name)=0 then begin
  fDAT.Free;
  MsgFile('log.txt',formatdatetime('dd:mm:yyyy ',date)+
          formatdatetime('hh:mm:ss [',time) + lib +'] not header');
  exit
 end;
 setlength(rl_,0); //fix- чисто обнуляем :-)
 setlength(tl_,0);
 progress_DAT:= '';

 //============================= ADRESS TABLE
 //визуализируем -необ
 if Assigned(FDeskrChange) then FDeskrChange(Self,head.name); //это если компонентом
 progress_DAT:= '... ' + head.name;
 //============================= ITEM RectList (дин)
 for i:=0 to head.CountRectList-1  do begin
  fDAT.Position:= head.BytePosRectList + 4*4*i;
  fDAT.Read(recl, SIZEOF(recl));
  //архив пересчитанных-
  setlength(rl_,length(rl_)+1);
  rl_[length(rl_)-1].BetaStart:= recl.BetaStart*360/16384;
  rl_[length(rl_)-1].BetaEnd  := recl.BetaEnd*360/16384;
  rl_[length(rl_)-1].DStart   := recl.DStart*250/1599;
  rl_[length(rl_)-1].DEnd     := recl.DEnd*250/1599
 end;
 //============================= ITEM TableList (дин)
 head.BytePosTableList:= head.BytePosRectList + (head.CountRectList*4*4); //fix- в файле
 for i:=0 to head.CountTableList-1  do begin
  fDAT.Position:= head.BytePosTableList + 4*4*i;
  fDAT.Read(tabl, SIZEOF(tabl));
...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 08.12.2009 в 21:09.
raxp вне форума Ответить с цитированием
Старый 11.12.2009, 16:11   #7
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

Ладно, я могу посчитать длинну своего файла, в конце моих данных просто будет дописано сколько звуковых файлов прикреплено и какого размера, а дальше просто к концу файла будут пришиты звуковые файлы. но теперь другой вопрос возникает:
Если я потом смогу выцепить оттуда звуковые дорожки, то как их воспроизводить то? И как их выцеплять? Создать массив из байтов звуковой дорожки? А как воспроизвести то сотворенное?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 11.12.2009, 17:35   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

пока видится такой вариант:
сохранить "выцепленный" файл, например в виде ~temp.mid (или mp3, смотря что у вас), проиграть и удалить + проверка при закрытии приложения...
Код:
...
 AssignFile(TempFile,'~temp.mid');
 REWRITE(TempFile,1);
 BlockWrite(); // или другим вашим методом сохраняем-
 CloseFile(TempFile);
 //
 MCISendString(PChar('play ' + '~temp.mid'),nil,0,0);
...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 11.12.2009, 17:44   #9
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

временные файлы? хм... не знаю даже... а рационально это?
а если нет доступа на запись? че тогда?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 11.12.2009, 18:06   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
а если нет доступа на запись? че тогда?
значит копировать (создавать) в память и воспроизводить оттуда (например из res-ов это делается одной строчкой), по крайней мере синтезировать waveform в памяти есть способы... значит должен быть способ закинуть уже готовый, нужно поискать.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sound Forge редактирование скрипта на C# Сергей86 Помощь студентам 2 12.10.2009 05:42
integer Xcopy Общие вопросы Delphi 8 13.09.2009 17:03
Integer ben95 Помощь студентам 5 03.03.2009 16:05
Записать в Integer Михаил Юрьевич Общие вопросы Delphi 3 04.07.2008 17:11
sound djbaxo Общие вопросы C/C++ 4 20.05.2007 21:52