Форум программистов, компьютерный форум CyberForum.ru

Delphi и SoundPool - Android

Восстановить пароль Регистрация
 
ravepig
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 10
03.08.2014, 19:36     Delphi и SoundPool #1
Господа, нигде не могу найти документации по андроидскому SoundPool в Delphi. Для остальных языков - навалом всяких разных, но это как в супермаркете, есть все, кроме того, что нужно. Может, есть у кого примеры, или вспомнит свежей головой? Мозг совсем перегрелся.

Вот к примеру, такое. Естественно, не компилируется, ошибка "record, object or class required".

Delphi
1
2
3
4
5
var SndPool: JSoundPool; SndNum: integer; FileName: JString;
...
SndPool := JSoundPoolClass.Init (16, 3, 100);
...
SndNum := SndPool.Load (FileName, 1);
Если создать отдельную переменную типа JSoundPoolClass, чья фукция Init как раз возвращает что-то там типа JSoundPool, выпадает с access violation прям на старте. Конструктора какого-то у него больше и нет.

Что делать? Как заставить его работать?.. Серьезно, чую, ответ где-то рядом, но от этой "динамическости" и "создания объектов на лету" уже голова кругом. MediaPlayer для коротких звуковых эффектов не катит, слишком уж медленный и одноканальный.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2014, 19:36     Delphi и SoundPool
Посмотрите здесь:

SoundPool не везде воспроизводит Android
Как отследить момент окончания аудио в SoundPool? Android
Android Не воспроизводится звук на Galaxy S4 через SoundPool. Почему?
Android SoundPool vs MediaPlayer
SoundPool - не воспроизводит до конца звук Android
Android SoundPool, регулировать громкость воспроизведения
SoundPool Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
 Аватар для volvo
22068 / 14373 / 4040
Регистрация: 22.10.2011
Сообщений: 25,443
Записей в блоге: 2
03.08.2014, 20:20     Delphi и SoundPool #2
С каких пор в Дельфи конструкторы стали именоваться Init? Всегда был Create... Вот создай экземпляр через Create, а потом уже к нему применяй Init, если понадобится...
ravepig
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 10
03.08.2014, 20:27  [ТС]     Delphi и SoundPool #3
Цитата Сообщение от UI Посмотреть сообщение
а потом уже к нему применяй Init, если понадобится.
Так вот в том и дело, что без Init оно работать не будет - там задается тип воспроизведения и кол-во каналов. Если впихнуть перед всем этим что-то навроде "SndPool := TJSoundPool.Create", ошибку "record, object or class..." на строке с Init это не уберет.
volvo
Супер-модератор
 Аватар для volvo
22068 / 14373 / 4040
Регистрация: 22.10.2011
Сообщений: 25,443
Записей в блоге: 2
03.08.2014, 20:29     Delphi и SoundPool #4
Объясни мне, с какого перепуга
var SndPool: JSoundPool;
, но
SndPool := TJSoundPool.Create ? Что-то ты недоговариваешь...
ravepig
0 / 0 / 0
Регистрация: 07.06.2014
Сообщений: 10
03.08.2014, 20:38  [ТС]     Delphi и SoundPool #5
А вот если б я сам знал, какую ему конструкцию втюхать надо. По идее, все необходимые функции (перечисленные в официальной справке по Android API) из этого слизанного из Java объекта хранятся в типе JSoundPool. Но откуда-то еще взялся TJSoundPool, у которого есть конструктор Create. У простого "J..." его нету! Ясен пень, оно не будет работать без конструктора, но он-то не подходит. Странно. И как потом применить этот злосчастный Init?

В общем, вот как оно выглядит в самой библиотеке (юнит Androidapi.JNI.Media).

Кликните здесь для просмотра всего текста
Delphi
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
JSoundPoolClass = interface(JObjectClass)
['{DFFA6151-B321-4111-A703-864E406FDA28}']
  {Methods}
  function init(maxStreams: Integer; streamType: Integer; srcQuality: Integer): JSoundPool; cdecl;
end;
 
[JavaSignature('android/media/SoundPool')]
JSoundPool = interface(JObject)
['{923ACDC6-1C0D-437A-9A44-D43B0BA82522}']
  {Methods}
  procedure autoPause; cdecl;
  procedure autoResume; cdecl;
  function load(path: JString; priority: Integer): Integer; cdecl; overload;
  function load(context: JContext; resId: Integer; priority: Integer): Integer; cdecl; overload;
  function load(afd: JAssetFileDescriptor; priority: Integer): Integer; cdecl; overload;
  function load(fd: JFileDescriptor; offset: Int64; length: Int64; priority: Integer): Integer; cdecl; overload;
  procedure pause(streamID: Integer); cdecl;
  function play(soundID: Integer; leftVolume: Single; rightVolume: Single; priority: Integer; loop: Integer; rate: Single): Integer; cdecl;
  procedure release; cdecl;
  procedure resume(streamID: Integer); cdecl;
  procedure setLoop(streamID: Integer; loop: Integer); cdecl;
  procedure setOnLoadCompleteListener(listener: JSoundPool_OnLoadCompleteListener); cdecl;
  procedure setPriority(streamID: Integer; priority: Integer); cdecl;
  procedure setRate(streamID: Integer; rate: Single); cdecl;
  procedure setVolume(streamID: Integer; leftVolume: Single; rightVolume: Single); cdecl;
  procedure stop(streamID: Integer); cdecl;
  function unload(soundID: Integer): Boolean; cdecl;
end;
TJSoundPool = class(TJavaGenericImport<JSoundPoolClass, JSoundPool>) end;
Yandex
Объявления
03.08.2014, 20:38     Delphi и SoundPool
Ответ Создать тему
Опции темы

Текущее время: 16:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru