שיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...
-
@חסיד-פשוט גם לי אין נקודות, פניה כזו איננה דורשת נקודות
פשוט להסריט את המסך עם הקלטת תעבורה דרך האזור האישי ולשלוח להם -
@מוגן כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
יש כאן משהו שהצליח לעשות קריינות של גוגל קלאד בשמיעת המיילים?
אני...
עריכה: וכעת גם אתה... -
@האדם-החושב כתב בשיתוף | 'פלאפון מייל' - הגירסא המשופרת של מייל לפלאפון, כולל קבלת ושליחת מיילים דרך הפלאפון, קריינות מקצועית, ועוד...:
@פלמנמוני למה שלא תעשה tts דרך gemini?
אפשר הדרכה? אני לא מצליח
@פלמנמוני בpython זה נראה כך:
import io import wave from google import genai from google.genai import types def tts_single_speaker(token: str, text: str, model: str = "gemini-2.5-flash-preview-tts", voice: str = "Zephyr") -> bytes | None: client = genai.Client(api_key=token) response = client.models.generate_content( model=model, contents=[types.Part.from_text(text=text)], config=types.GenerateContentConfig( response_modalities=["AUDIO"], speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( voice_name=voice ) ) ), ) ) if response and response.candidates and response.candidates[0] and response.candidates[0].content and response.candidates[0].content.parts and response.candidates[0].content.parts[0].inline_data: return response.candidates[0].content.parts[0].inline_data.data return None def wave_file(pcm, channels=1, rate=24000, sample_width=2) -> bytes: buf = io.BytesIO() with wave.open(buf, "wb") as wf: wf.setnchannels(channels) wf.setsampwidth(sample_width) wf.setframerate(rate) wf.writeframes(pcm) return buf.getvalue() def main(): text = "שלום, זהו מבחן של המערכת להמרת טקסט לדיבור." token = "YOUR_API_KEY_HERE" audio_pcm = tts_single_speaker(token, text) if audio_pcm: audio_bytes = wave_file(audio_pcm) with open("output.wav", "wb") as f: f.write(audio_bytes) print("Audio content written to output.wav") else: print("Failed to generate audio.")פעם ניסיתי לעשות את זה בgoogle script אבל לא הצלחתי לתרגם את החלק של המרת הpcm לwav.
-
@פלמנמוני בpython זה נראה כך:
import io import wave from google import genai from google.genai import types def tts_single_speaker(token: str, text: str, model: str = "gemini-2.5-flash-preview-tts", voice: str = "Zephyr") -> bytes | None: client = genai.Client(api_key=token) response = client.models.generate_content( model=model, contents=[types.Part.from_text(text=text)], config=types.GenerateContentConfig( response_modalities=["AUDIO"], speech_config=types.SpeechConfig( voice_config=types.VoiceConfig( prebuilt_voice_config=types.PrebuiltVoiceConfig( voice_name=voice ) ) ), ) ) if response and response.candidates and response.candidates[0] and response.candidates[0].content and response.candidates[0].content.parts and response.candidates[0].content.parts[0].inline_data: return response.candidates[0].content.parts[0].inline_data.data return None def wave_file(pcm, channels=1, rate=24000, sample_width=2) -> bytes: buf = io.BytesIO() with wave.open(buf, "wb") as wf: wf.setnchannels(channels) wf.setsampwidth(sample_width) wf.setframerate(rate) wf.writeframes(pcm) return buf.getvalue() def main(): text = "שלום, זהו מבחן של המערכת להמרת טקסט לדיבור." token = "YOUR_API_KEY_HERE" audio_pcm = tts_single_speaker(token, text) if audio_pcm: audio_bytes = wave_file(audio_pcm) with open("output.wav", "wb") as f: f.write(audio_bytes) print("Audio content written to output.wav") else: print("Failed to generate audio.")פעם ניסיתי לעשות את זה בgoogle script אבל לא הצלחתי לתרגם את החלק של המרת הpcm לwav.
-
@האדם-החושב מהו הקישור דרכו מתבצע התקשורת?
-
@פלמנמוני זאת ספרייה לpython, הבקשות מאחורי הקלעים.
לכאו' זה הלינק הזה:https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent?key= -
@האדם-החושב זהו, שקישור זה לא עבד לי.
חוששני שצריך דרך גוגל קלאוד, ולכן לא נראה לי שזה כדאי את ההשקעה.
איזה מפתח API הכנסת?function tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) console.log(response) return response.candidates[0].content.parts[0].inlineData.data } function test(){ const text = "בדיקת tts gemini"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const blob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(blob); }ואז הורדת הקובץ מהדרייב והמרה בעזרת ffmpeg
ffmpeg -f s16le -ar 24000 -ac 1 -i test.pcm test.wavצריך למצוא דרך להמיר את זה בגוגל סקריפט.
עריכה:
הצלחתיfunction tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) return response.candidates[0].content.parts[0].inlineData.data } function createWavFromPcm(pcmBytes, sampleRate, numChannels, bitsPerSample) { const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmBytes.length; const fileSize = 44 - 8 + dataSize; const header = []; function pushString(s) { for (let i = 0; i < s.length; i++) header.push(s.charCodeAt(i)); } function pushUint32LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF, (val >> 16) & 0xFF, (val >> 24) & 0xFF); } function pushUint16LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF); } pushString("RIFF"); pushUint32LE(fileSize); pushString("WAVE"); pushString("fmt "); pushUint32LE(16); pushUint16LE(1); pushUint16LE(numChannels); pushUint32LE(sampleRate); pushUint32LE(byteRate); pushUint16LE(blockAlign); pushUint16LE(bitsPerSample); pushString("data"); pushUint32LE(dataSize); const headerBytes = new Uint8Array(header); const out = new Uint8Array(headerBytes.length + pcmBytes.length); out.set(headerBytes, 0); out.set(pcmBytes, headerBytes.length); return out; } function test(){ const text = "נשלחה אליך הודעת מייל חדשה בתאריך א כסליו תשפו"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const pcmBlob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(pcmBlob); const sampleRate = 24000; const channels = 1; const bits = 16; const wavBytes = createWavFromPcm(pcmBytes, sampleRate, channels, bits); const wavBlob = Utilities.newBlob(wavBytes, 'audio/wav', 'test.wav'); DriveApp.createFile(wavBlob); }אגב, לגבי שליחת מיילים אפשר לשלוח על ידי שלוחת api במקום לקרוא את הymgr בשלוחת קבלת נתונים (יצטרכו לעשות פריסה של הסקריפט ולהוסיף פונקציית doGet ולהשתיק את הודעת אין מענה משרת api.) כך הוא לא יצטרך בכל ריצה לבדוק את הymgr וכך הסקריפט יהיה מהיר יותר.
-
function tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) console.log(response) return response.candidates[0].content.parts[0].inlineData.data } function test(){ const text = "בדיקת tts gemini"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const blob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(blob); }ואז הורדת הקובץ מהדרייב והמרה בעזרת ffmpeg
ffmpeg -f s16le -ar 24000 -ac 1 -i test.pcm test.wavצריך למצוא דרך להמיר את זה בגוגל סקריפט.
עריכה:
הצלחתיfunction tts(text){ const model = "gemini-2.5-flash-preview-tts" const token = "gemini token" const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${token}` const payload = { contents: [{ parts:[{ text: text }] }], generationConfig: { responseModalities: ["AUDIO"], speechConfig: { voiceConfig: { prebuiltVoiceConfig: { voiceName: "Kore" } } } }, model: "gemini-2.5-flash-preview-tts", } const options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } const response = JSON.parse(UrlFetchApp.fetch(url, options)) return response.candidates[0].content.parts[0].inlineData.data } function createWavFromPcm(pcmBytes, sampleRate, numChannels, bitsPerSample) { const byteRate = sampleRate * numChannels * (bitsPerSample / 8); const blockAlign = numChannels * (bitsPerSample / 8); const dataSize = pcmBytes.length; const fileSize = 44 - 8 + dataSize; const header = []; function pushString(s) { for (let i = 0; i < s.length; i++) header.push(s.charCodeAt(i)); } function pushUint32LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF, (val >> 16) & 0xFF, (val >> 24) & 0xFF); } function pushUint16LE(val) { header.push(val & 0xFF, (val >> 8) & 0xFF); } pushString("RIFF"); pushUint32LE(fileSize); pushString("WAVE"); pushString("fmt "); pushUint32LE(16); pushUint16LE(1); pushUint16LE(numChannels); pushUint32LE(sampleRate); pushUint32LE(byteRate); pushUint16LE(blockAlign); pushUint16LE(bitsPerSample); pushString("data"); pushUint32LE(dataSize); const headerBytes = new Uint8Array(header); const out = new Uint8Array(headerBytes.length + pcmBytes.length); out.set(headerBytes, 0); out.set(pcmBytes, headerBytes.length); return out; } function test(){ const text = "נשלחה אליך הודעת מייל חדשה בתאריך א כסליו תשפו"; const pcmBase64 = tts(text); const pcmBytes = Utilities.base64Decode(pcmBase64); const pcmBlob = Utilities.newBlob(pcmBytes, 'application/octet-stream', 'test.pcm'); DriveApp.createFile(pcmBlob); const sampleRate = 24000; const channels = 1; const bits = 16; const wavBytes = createWavFromPcm(pcmBytes, sampleRate, channels, bits); const wavBlob = Utilities.newBlob(wavBytes, 'audio/wav', 'test.wav'); DriveApp.createFile(wavBlob); }אגב, לגבי שליחת מיילים אפשר לשלוח על ידי שלוחת api במקום לקרוא את הymgr בשלוחת קבלת נתונים (יצטרכו לעשות פריסה של הסקריפט ולהוסיף פונקציית doGet ולהשתיק את הודעת אין מענה משרת api.) כך הוא לא יצטרך בכל ריצה לבדוק את הymgr וכך הסקריפט יהיה מהיר יותר.
משהוא יודע למה זה קורה ?
אולי בגלל הסינון שלי ?
-
משהוא יודע למה זה קורה ?
אולי בגלל הסינון שלי ?
@שקיעות-בלימוד אכן זה בגלל נטפרי שצריך לשלוח פניה
-
@שקיעות-בלימוד אכן זה בגלל נטפרי שצריך לשלוח פניה
@חסיד-פשוט
אין לי בעיה לשלוח רק מה אני צריך לבקש מהם לפתוח ? -
@חסיד-פשוט
אין לי בעיה לשלוח רק מה אני צריך לבקש מהם לפתוח ?@שקיעות-בלימוד שלח להם הסרטות מסך מהקובץ הגדרות
-
@שקיעות-בלימוד שלח להם הסרטות מסך מהקובץ הגדרות
@חסיד-פשוט
וזה ישחרר לכולם או רק לי ? -
@חסיד-פשוט
וזה ישחרר לכולם או רק לי ?@שקיעות-בלימוד רק לך.