Я никогда не писал аудиоплеер с возможностью поиска, но я подозреваю, что это происходит так. Каждый пакет аудио декодируется во фрагмент оригинальной звуковой волны. Обычно эти фрагменты последовательно примыкают друг к другу, и в результате получается непрерывная волна, которая слышится как звук без артефактов. При поиске вы заставляете два фрагмента из разных частей файла примыкать друг к другу. Это обычно вносит разрыв в результирующую звуковую волну, которую ухо воспринимает как щелчок или треск или как вы называете это (я предполагаю) артефакт.
Вот более конкретный пример. Предположим, что вы проиграли первые 25 пакетов аудио, прежде чем искать. Допустим, пакет 25 декодируется в волну, последняя выборка которой составляет 12345. В то время как пакет 25 визуализируется в динамик, вы стремитесь к пакету 66. Допустим, первая выборка пакета 66 имеет значение -23456. Таким образом, цифровой аудиопоток перепрыгивает с 12345 до -23456 по поиску. Это огромный разрыв, и он будет звучать как поп.
Я думаю, что одним из решений является захват одного дополнительного пакета перед началом поиска (пакет 26 в моем примере), декодирование его в автономный буфер, применение затухания и затем помещение его в очередь воспроизведения. После того, как вы ищете нужное место, возьмите первый пакет (66 в моем примере), декодируйте его в другой автономный буфер, примените эффект постепенного появления, а затем поместите его в очередь воспроизведения. Это должно обеспечить плавные звуковые волны и поиск без артефактов.
Если вы умны, вы можете сделать постепенное или постепенное исчезновение настолько коротким или длинным, насколько вы хотите. Я думаю, что только несколько миллисекунд должно быть достаточно для предотвращения артефактов. Вы можете даже применить перекрестное затухание от старых и новых пакетов. Также может быть достаточно просто записать последнее значение выборки в последнем пакете перед поиском и постепенно понизить его до нуля в течение нескольких выборок, вместо того, чтобы сразу же обнулять его. Это может быть проще, чем декодировать дополнительный пакет.
Это мое предположение о том, как можно решить эту проблему. Это явно решаемая проблема, поэтому я рекомендую вам также взглянуть на аудиоплееры с открытым исходным кодом и посмотреть, как они реализуют поиск. Такие программы, как Audacity, Totem, Banshee, RhythmBox, Amarok или VLC, или фреймворки, такие как GStreamer, могут быть хорошими примерами для изучения. Если вы обнаружите, что они используют известные методы, пожалуйста, сообщите о теме здесь. Я думаю, что люди захотят узнать, кто они. Удачи!