1. 程式人生 > >讀取檔案流並寫入檔案流

讀取檔案流並寫入檔案流

  Stream stream = File.OpenRead(Server.MapPath("0.jpg"));
          
        long len = stream.Length;
        byte[] buff = new byte[len];
        stream.Read(buff, 0, buff.Length);


        Stream f = new FileStream(Server.MapPath("1.jpg"), FileMode.OpenOrCreate);
        BinaryWriter write 
= new BinaryWriter(f); write.Write(buff, 0, buff.Length);
  using (Stream responseStream = response.GetResponseStream())
        {
            using (FileStream localFileStream =   new FileStream(Server.MapPath(path), FileMode.OpenOrCreate))
            {
                var buffer = new
byte[1024]; int bytesRead; while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0) { localFileStream.Write(buffer, 0, bytesRead); } } }

 下面程式碼,用於把其他網站的wav引起提取存放在本機,然後轉換為pcm格式,然後提交到百度介面,最終把語音轉換為文字。

參考 http://ai.baidu.com/docs#/ASR-API/top 介紹

    protected void Button1_Click(object sender, EventArgs e)
    {

         
       string  url = "http://localhost:50961/16.wav";
        string tempMedia=FetchMedia(url);  
        string pcmFile=ConvertMedia(tempMedia);

        var data = System.IO.File.ReadAllBytes(Server.MapPath(pcmFile));
        Asr _asrClient = new Asr("key", "key");
       
        // { "corpus_no": "6579488890526359184", "err_msg": "success.", "err_no": 0, "result": [ "今天中午吃什麼呢我想吃回鍋肉,不知道你喜歡不喜歡," ], "sn": "87884864331531906633" }
 
        
        string json = _asrClient.Recognize(data, "pcm", 16000).ToString();


        BaiduResult r = Newtonsoft.Json.JsonConvert.DeserializeObject<BaiduResult>(json);
        Response.Write(r.result[0]);
      

        try
        {

            System.IO.File.Delete(Server.MapPath(tempMedia));
        }
        catch
        {
        }

        try
        {
            System.IO.File.Delete(Server.MapPath(pcmFile));

        }
        catch
        { }

    }


    public string FetchMedia(string fullURL)
    {
       
        HttpWebRequest request = WebRequest.Create(fullURL) as HttpWebRequest; 
        string filename = Guid.NewGuid().ToString() + ".wav";
        string path = "temp/" + filename; 

        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        { 
           using (Stream responseStream = response.GetResponseStream())
           {
               using (FileStream localFileStream = new FileStream(Server.MapPath(path), FileMode.OpenOrCreate))
               {
                var buffer = new byte[1024*10]; 
                int bytesRead;

                while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    localFileStream.Write(buffer, 0, bytesRead);
                }
            }
          }
        } 

        return path;

    }




    public string ConvertMedia(string mediaName)
    {
        string exe = Server.MapPath("ffmpeg.exe");
        string fromFile = Server.MapPath(mediaName);
        string newFilename = "temp/" + Guid.NewGuid().ToString()+".pcm";
        string tofile = Server.MapPath(newFilename);
         
        //ffmpeg -y  -i 16k.wav  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 16k.pcm 
        System.Diagnostics.Process p = System.Diagnostics.Process.Start(exe, " -y  -i \""+fromFile+"\"  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 \""+tofile+"\" ");
       // p.StartInfo.UseShellExecute = false;
        p.WaitForExit();
        return newFilename;
    }

相關推薦

讀取檔案寫入檔案

Stream stream = File.OpenRead(Server.MapPath("0.jpg")); long len = stream.Length; byte[] buff = new byte[len]; s

C#從資料庫中讀取二進位制生成檔案

下面以圖片檔案為例加以說明。從資料庫表 “圖片儲存”中讀取ID為1的圖片資料並生成圖片檔案。   MySqlConnection conn = new MySqlConnection("Server=localhost;Database=test;charset=utf8;U

Java通過http協議下載檔案寫入位元組的方法

 最近寫微服務,從服務端通過http協議下載檔案並寫入位元組流。開始以為很簡單。直接上手就來了,程式碼如下: String szHttpFile="http://..../downlaod&&fileId="+fileId+"&&extra[a

javaSE (三十)IO異常處理、圖片加密處理、輸入檔案路徑拷貝檔案內容、在檔案中鍵入內容

1、IO流異常處理: IO流異常處理一般可以寫得如下這麼複雜(面試備用) alt + shift + z 直接try-catch ,不過沒有加finally 因為作用域的問題,需要在外面建立BufferedInputStream物件並且初始化為null(要是不初始化,就

6、使用IO實現檔案複製修改檔案字尾

程式設計題目: 6.編寫一個程式,將D:\java目錄下的所有.java檔案複製到D:\jad目錄下,並將原來檔案的副檔名從.java改為.jad。 示例程式碼: package program.stream.exercise06; impo

讀取FTP上的excel檔案寫入資料庫

       今天遇到一些問題,需要從ftp上讀取一些excel檔案,並需要將excel中的資料寫入到資料庫,這樣就可以通過管理頁面檢視這些資料。     我將相關工作分為三步,1、從ftp上讀取相關檔案,並將excel檔案下載到本地。2、讀取

java建立檔案檔案寫入字串,讀取字串到螢幕

public class FileTest01 { public static void writeFileString() { File file = new File("E:\\zkn")

Java 按行讀取檔案按行寫入檔案以空格分割字串

首先是按行讀取字串 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public c

隨機數生成寫入檔案(C實現)

#include <stdlib.h> #include <stdio.h> #include <time.h> //生成隨機數列 int write() { int i,j; FILE *pf = NULL;

FileInputStream讀取檔案&FileOutputStream寫入檔案

FileInputStream讀取檔案&FileOutputStream寫入檔案 概念摘自:http://jingyan.baidu.com/article/5552ef473ab5f2518ffbc98e.html  Java的流式輸入輸出建立在4個抽象類的基礎上:Inp

iOS自定義log寫入檔案

前言 iOS開發中,很多情況需要使用到log列印,本文主要講解如何將列印寫入檔案,並且不影響控制檯的正常列印。 常見方法 NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSU

vim中 E212:無法開啟寫入檔案 的解決辦法

在編寫配置檔案時,常常忘記切換到root使用者,導致檔案編輯完畢,敲入:wq 退出儲存時,出現 E212:無法開啟並寫入檔案 的錯誤提示。這是由於在該目錄下當前使用者沒有寫許可權導致。 解決辦法如下: 【1】 將檔案儲存到使用者目錄下,再改變所有者,然後移動

從鍵盤輸入4個0-13之間的正整數實現24點遊戲寫入檔案

程式碼如下: include<stdio.h> include <stdlib.h> include <time.h> FILE * fp; void main() { void play(); //宣告函式 fp=fopen

獲取當前計算機時間寫入檔案

1.    SYSTEMTIME now; GetLocalTime(&now); char timenow[100]; sprintf(timenow, "%d%02d%02d%02d%02

javaSE (三十二)找出字串中重複的元素寫入檔案、模擬正版軟體使用次數期限、獲取資料夾下的全部java檔案

1、找出字串中重複的元素並寫入檔案: 問題:鍵入(或者從一個檔案中讀取)一個字串,找出字串中重複的元素並寫入檔案 思路: 鍵入字串 map儲存 寫入檔案 程式碼: package cn.njupt; /* * * 鍵入一串字元,計算每個字元出

python檢測U盤的插入,以及進行自動複製檔案寫入檔案

技術要點分析: 1.如何檢測有U盤的插入。 2.如何複製U盤裡面的東西 3.如果U盤可寫,如何寫入檔案到U盤裡面。 # -*- coding: utf-8 -*- # @Time : 20

R語言 生成符合特定分佈的隨機資料寫入檔案

生成50000個符合正態分佈的資料,其中期望為40,標準差為3,N(40,9)表示期望為40,方差為9 在R語言中使用help(rnom)可知第三個引數指標準差,write.csv表示將資料寫入norm_40_9.csv檔案,不需要事先建立檔案,會自動建立 > d&

使用pydicom讀取dicom檔案檔案做一些簡單操作

#! /usr/bin/python # -*- coding: utf-8 -*- import dicom import pylab ds=dicom.read_file("/home/s/data/LungCancer/CT/benign/contrast/60282

Python從資料庫讀取大量資料批量寫入檔案

使用機器學習訓練資料時,如果資料量較大可能我們不能夠一次性將資料載入進記憶體,這時我們需要將資料進行預處理,分批次載入進記憶體。下面是程式碼作用是將資料從資料庫讀取出來分批次寫入txt文字檔案,方便我

關於物件例項序列化加密解密寫入檔案的技巧

最近在網上看見一些文章在討論如何將一個物件或物件的列表序列化並加密後儲存到檔案中的討論,有很多方法針對英文字串和數值型資料都能很好完成,但是加入中文,或者加入一些諸如DateTime型別的資料後,在反序列化或解密時總是會出現異常,不能正確執行,經過一天的測試和比對,發現要解