# @Sekai_Yoneya from pydub import AudioSegment, effects; from telethon import types; from .. import loader, utils; import math, requests, io; import numpy as np @loader.tds class AudioEditorMod(loader.Module): "Модуль для работы со звуком(???)" strings = {"name": "AudioEditor"} async def basscmd(self, m): """.bass [уровень bass'а 2-100 (Default 2)] BassBoost""" args = utils.get_args_raw(m) if not args: lvl = 2 else: if args.isdigit() and (1 Шакалинг""" args = utils.get_args_raw(m) if not args: lvl = 25 else: if args.isdigit() and (1     Эхо эффект""" audio = await get_audio(m, "Эхо эффект") if not audio: return out = AudioSegment.empty() n = 200 none = io.BytesIO() out += audio.audio + AudioSegment.from_file(none) for i in range(5): echo = audio.audio - 10 out = out.overlay(audio.audio, n) n += 200 await go_out(m, audio, out, audio.pref, audio.pref) async def volupcmd(self, m): """.volup     Увеличить громкость на 10dB""" audio = await get_audio(m, "+10dB") if not audio: return out = audio.audio + 10 await go_out(m, audio, out, audio.pref, audio.pref) async def voldwcmd(self, m): """.voldw     Уменьшить громкость на 10dB""" audio = await get_audio(m, "-10dB") if not audio: return out = audio.audio - 10 await go_out(m, audio, out, audio.pref, audio.pref) async def revscmd(self, m): """.revs     Развернуть аудио""" audio = await get_audio(m, "Reverse") if not audio: return out = audio.audio.reverse() await go_out(m, audio, out, audio.pref, audio.pref) async def repscmd(self, m): """.reps     Повторить аудио 2 раза подряд""" audio = await get_audio(m, "Повтор") if not audio: return out = audio.audio*2 await go_out(m, audio, out, audio.pref, audio.pref) async def slowscmd(self, m): """.slows     Замедлить аудио 0.5x""" audio = await get_audio(m, "Замедление") if not audio: return s2 = audio.audio._spawn(audio.audio.raw_data, overrides={"frame_rate": int(audio.audio.frame_rate * 0.5)}) out = s2.set_frame_rate(audio.audio.frame_rate) await go_out(m, audio, out, audio.pref, audio.pref, audio.duration*2) async def fastscmd(self, m): """.fasts Ускорить аудио 1.5x""" audio = await get_audio(m, "Ускорение") if not audio: return s2 = audio.audio._spawn(audio.audio.raw_data, overrides={"frame_rate": int(audio.audio.frame_rate * 1.5)}) out = s2.set_frame_rate(audio.audio.frame_rate) await go_out(m, audio, out, audio.pref, audio.pref, round(audio.duration/2)) async def rightscmd(self, m): """.rights     Весь звук в правый канал""" audio = await get_audio(m, "Правый канал") if not audio: return out = effects.pan(audio.audio, +1.0) await go_out(m, audio, out, audio.pref, audio.pref) async def leftscmd(self, m): """.lefts     Весь звук в левый канал""" audio = await get_audio(m, "Левый канал") if not audio: return out = effects.pan(audio.audio, -1.0) await go_out(m, audio, out, audio.pref, audio.pref) async def normscmd(self, m): """.norms     Нормализовать звук (Из тихого - нормальный)""" audio = await get_audio(m, "Нормализация") if not audio: return out = effects.normalize(audio.audio) await go_out(m, audio, out, audio.pref, audio.pref) async def byrobertscmd(self, m): '''.byroberts     Добавить в конец аудио "Directed by Robert B Weide"''' audio = await get_audio(m, "Directed by...") if not audio: return out = audio.audio + AudioSegment.from_file(io.BytesIO(requests.get("https://raw.githubusercontent.com/Daniel3k00/files-for-modules/master/directed.mp3").content)).apply_gain(+8) await go_out(m, audio, out, audio.pref, audio.pref) def __init__(self): self.name = self.strings['name'] self._me = None self._ratelimit = [] async def client_ready(self, client, db): self._db = db self._client = client self.me = await client.get_me() async def get_audio(m, pref): class audio_ae_class(): audio = None; duration = None; voice = None; pref = None; reply = None reply = await m.get_reply_message() if reply and reply.file and reply.file.mime_type.split("/")[0] == "audio": ae = audio_ae_class() ae.pref = pref ae.reply = reply ae.voice = reply.document.attributes[0].voice ae.duration = reply.document.attributes[0].duration await m.edit(f"[{pref}] Скачиваю...") ae.audio = AudioSegment.from_file(io.BytesIO(await reply.download_media(bytes))) await m.edit(f"[{pref}] Работаю...") return ae else: await m.edit(f"[{pref}] reply to audio..."); return None async def go_out(m, audio, out, pref, title, fs=None): o = io.BytesIO() o.name = "audio." + ("ogg" if audio.voice else "mp3") if audio.voice: out.split_to_mono() await m.edit(f"[{pref}] Экспортирую...") out.export(o, format="mp3" if audio.voice else "wav", bitrate="44100" if audio.voice else None, codec="u16le" if audio.voice else None) o.seek(0) await m.edit(f"[{pref}] Отправляю...") await m.client.send_file(m.to_id, o, reply_to=audio.reply.id, voice_note=audio.voice, attributes=[types.DocumentAttributeAudio(duration = fs if fs else audio.duration, title=title, performer="@Sekai_Yoneya")] if not audio.voice else None) await m.delete()