urma
@urma
Java, android, Web

Как сделать хороший rendering музыки?

Добрый день всем!

Я пытаюсь сделать rendering музыкального файла. Не знаю правильно ли я называю но я имею в виду 51103b507699475ba6ce6c84ee00c09a.png
когда лини танцует под музыку :D.
Все работает но не качественно, мне не нравится. Я делаю так:
public class VisualizerView extends View
дальше переопределяю метод
@Override
    protected void onDraw(Canvas canvas) {

беру от музыкального файла bytes[] и исходя из этого рисую

Например:
for (int i = 0; i < bytes.length - 1; i++) {
            mPoints[i * 4] = rect.width() * i / (bytes.length - 1);
            mPoints[i * 4 + 1] = rect.height() / 2
                    + ((byte) (bytes[i] + 128)) * (rect.height() / 2) / 128;
            mPoints[i * 4 + 2] = rect.width() * (i + 1) / (bytes.length - 1);
            mPoints[i * 4 + 3] = rect.height() / 2
                    + ((byte) (bytes[i + 1] + 128)) * (rect.height() / 2)
                    / 128;
        }
        canvas.drawLines(mPoints, mPaint);

но он работает не очень плавно, не успевает нарисовать.

Так вот, есть ли более легкие пути для реализации этого? Чтобы быстрее работал.
Спасибо!!!
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
orcDamnar
@orcDamnar
Java, C/C++, Android SDK
Проблема в том, что вы берете bytes[] закодированного формата. Для такого дела - вам нужно самостоятельно писать декодер в нативном пространстве, и делать воспроизведение, пропуская декодированные(можно получить используя какой-нибудь кодек, например для мп3 - лайм) байты через буфер попутно рисуя нужную вам картинку.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mannaro
@mannaro
Умею профессионально гуглить
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы