Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Звук в память контроллера Wav Data


Звук в память контроллера Wav Data

Сообщений 1 страница 2 из 2

1

Код PureBasic, генерирующий блок DATA, галочка для убирания начала данных из Wav файла.

https://forumupload.ru/uploads/0000/25/b8/1295/t739063.png

Код программы Wav-To-Data
Код:
Enumeration
  #okno
  #knfile
  #txt
  #f1
  #ch44
  #t1
EndEnumeration

text.s="" 
text2.s=""
byte.a
tm44.a=0


If OpenWindow(#okno, 450, 200, 715, 545, "WAV to DATA for Bascom AVR", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  ButtonGadget(#knfile,120,10,90,20,"Открыть файл")  
  CheckBoxGadget(#Ch44, 10, 10, 100, 20, "Удалить 44 байта")
  TextGadget(#t1,220,12,700,20,"Требуется файл WAV PCM 8bit MONO")
EditorGadget(#txt,10,35,695,500,#PB_Editor_WordWrap|#PB_Editor_ReadOnly)

Repeat
     Event = WaitWindowEvent()
     Select Event
       Case #PB_Event_Gadget
         Select EventGadget()
           Case #knfile
             StandardFile$ = "\"   ; задаём начальный файл+путь для отображения
              Pattern$ = "WAV/PCM/8bit/mono(*.wav)|*.WAV"
              Pattern = 0    ; используем первый из трёх возможных шаблонов как стандарт
              File$ = OpenFileRequester("Пожалуйста выберите файл для загрузки", StandardFile$, Pattern$, Pattern)
              If File$
                text="DATA "
                tm=0
                tm2=0
                ClearGadgetItems(#txt):
                ReadFile(#f1,file$)
                 Size=Lof(#f1) ; Узнаём размер файла
                 If Size>0
                   text2="DATA "
                   size1=0
                   If GetGadgetState(#ch44)
                     tm44=43
                   Else
                     tm44=0
                   EndIf
                   
                   While Eof(#f1) = 0
                     byte=ReadByte(#F1)
                     If tm44=0 
                         tm=tm+1
                         tm2=tm2+1
                       Else
                         tm44-1
                     EndIf
                     
                     If tm=24
                       tm=0
                       size1+1
                       text2=text2+Str(byte)
                       AddGadgetItem(#txt,-1,text2)
                       text2="DATA "
                       Else
                         size1+1
                         If Eof(#f1)
                            text2=text2+Str(byte)
                          Else
                           text2=text2+Str(byte)+", "
                         EndIf
                     EndIf
                 Wend
                 EndIf
                 CloseFile(#f1)
                            AddGadgetItem(#txt,-1," '============= "+Str(size1)+" байт")
              Else

              EndIf

              
         EndSelect
      EndSelect
   Until Event = #PB_Event_CloseWindow
   

 CloseWindow(#okno)
 EndIf

То-есть программу надо дополнить форматом бинарного файла .bin. и вставлять как:

Код:
$inc L1 , Size , "c:\test.bas"

Отредактировано Ev3658 (2021-07-15 01:47:46)

0

2

Добавил создание файла, возможно ошибки, надеюсь их нет и всё можно использовать.
Компилятор должен быстрей компилить блока DATA, но проще их через бинарный файл

Wav-to-BIN
Код:
Enumeration
  #okno
  #knfile
  #txt
  #f1
  #f2
  
  #ch44
  #b
  #t1
EndEnumeration

text.s="" 
text2.s=""
byte.a
tm44.a=0


If OpenWindow(#okno, 450, 200, 715, 545, "WAV to DATA for Bascom AVR", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  ButtonGadget(#knfile,220,10,90,20,"Открыть файл")  
  CheckBoxGadget(#b, 120, 10, 100, 20, "Создать *.BIN")
  CheckBoxGadget(#Ch44, 10, 10, 100, 20, "Удалить 44 байта")
  TextGadget(#t1,220,12,700,20,"Требуется файл WAV PCM 8bit MONO")
EditorGadget(#txt,10,35,695,500,#PB_Editor_WordWrap|#PB_Editor_ReadOnly)

Repeat
     Event = WaitWindowEvent()
     Select Event
       Case #PB_Event_Gadget
         Select EventGadget()
           Case #knfile
             StandardFile$ = "\"   ; задаём начальный файл+путь для отображения
              Pattern$ = "WAV/PCM/8bit/mono(*.wav)|*.WAV"
              Pattern = 0    ; используем первый из трёх возможных шаблонов как стандарт
              File$ = OpenFileRequester("Пожалуйста выберите файл для загрузки", StandardFile$, Pattern$, Pattern)
              If File$
                text=""
                safe=0
                tm=0 ;Счётчик колличество байтов в строке
                tm2=0 ;Счётчик 
                
                ClearGadgetItems(#txt):
                filebin$=Left(file$,Len(File$)-3)+"bin" ;создаём бин файл
                               
                ReadFile(#f1,file$)
           
                
                
                If GetGadgetState(#b)
                   
                  If CreateFile (#f2,filebin$)
                   safe=1
                         Else
                  SetGadgetState(#b,0) 
                  EndIf
                
                EndIf
                
                Size=Lof(#f1) ; Узнаём размер файла
                 If Size>0
                   text2="DATA "
                   size1=0
                   If GetGadgetState(#ch44)
                     tm44=43
                     
                   Else
                     tm44=0
                   EndIf
                   
                   While Eof(#f1) = 0
                     
                     byte=ReadByte(#F1) ;Читаемый байт
                     
                     If tm44=0  ;Заглушка чтения первых 44 байт
                         tm=tm+1 
                          If safe=1
                            ;If tm>0
                              WriteByte(#f2,byte) 
                             ; EndIf
                            
                         EndIf
                         
                       Else
                         tm44-1
                        
                     EndIf
;Debug Str(Lof(#f1))+"="+Str(Lof(#f2))
                     If tm=24 And GetGadgetState(#b)=0   ;Нарезка строк
                       tm=0
                       size1+1 ;Счётчик байт
                       text2=text2+Str(byte)
                       ;AddGadgetItem(#txt,-1,text2)
                       text=text+#CRLF$+                       text2
                       text2="DATA "
                       Else
                         size1+1
                         If Eof(#f1)
                            text2=text2+Str(byte)
                          Else
                           text2=text2+Str(byte)+", "
                         EndIf
                     EndIf
                 Wend
                 EndIf
                 
                 If GetGadgetState(#b)
                   
                   text2="Файл: "+GetFilePart(filebin$)+" имеет размер:"+Str(Lof(#f2))
                   
                   text2=text2+" байт"+#CRLF$+"Исходный файл: "+GetFilePart(filebin$)+" имеет:"+Str(Lof(#f1))+" байт."
                   text2=text2+#LFCR$+"$inc L1 , "+Str(Lof(#f2))+", "+Chr(34)+GetFilePart(filebin$)+Chr(34)
                   CloseFile(#f2)
                   AddGadgetItem(#txt,0,#LF$+text2)
                   RunProgram(GetPathPart(filebin$)) ;Открываем папку в конце
                 Else
                   AddGadgetItem(#txt,-1,text+#CRLF$+" '============= "+Str(size1)+" байт")
                 EndIf
                 CloseFile(#f1)
              Else

              EndIf

              
         EndSelect
      EndSelect
   Until Event = #PB_Event_CloseWindow
   

 CloseWindow(#okno)
 EndIf

Скорость компиляции в разы быстрей если не через блок DATA (через $inc).

Отредактировано Ev3658 (2021-07-15 01:42:09)

0


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » Звук в память контроллера Wav Data